![grepを使用して一致する行の代わりにパターンに一致する前の行を表示するにはどうすればよいですか? [コピー]](https://linux33.com/image/7944/grep%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E8%A1%8C%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E5%89%8D%E3%81%AE%E8%A1%8C%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
を使用して-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"