grepを使用して一致する行の代わりにパターンに一致する前の行を表示するにはどうすればよいですか? [コピー]

grepを使用して一致する行の代わりにパターンに一致する前の行を表示するにはどうすればよいですか? [コピー]

を使用して-A周囲の線を表示できることを知っていますが、どちらも一致する線も表示します。このサンプルファイルで私がやりたいことは次のとおりです。-B-C

foo
bar

私はこのようなことをし、grep <option> "bar" file私の結果は次のようになります
foo

サイドノートgrep:他の人と一緒に使う方法や使い方を知っていますが、sed一度だけ使いたいです。grep

答え1

これは次の人にとってはかなり難しいことですsed

$ printf 'foo\nbar\n' | sed -n '$!N;/\nbar$/P;D'
foo

答え2

別のソリューション

grep -B 1 "bar" test | head -n 1

追加の正規表現や一致テストが不要なため、より効率的であるという利点がありますが、複数の一致では機能しません。

答え3

別の考えられる解決策:

grep -B 1 "bar" test | sed '/bar/d'

答え4

「bar」を無視する別のgrepを実行できます。

grep -B 1 "bar" test.txt | grep -v "bar"

関連情報