ランダム文字列の最初のインスタンスから最後のインスタンスまでファイルの内容を取得します。

ランダム文字列の最初のインスタンスから最後のインスタンスまでファイルの内容を取得します。

lessランダム文字列 "foo"の最初のインスタンスから最後のインスタンスまでどのように表示できますか?

このランダムな文字列は、ログのほぼすべての行に表示されます。grep "foo" bar.log | lessすべての関連行には表示されないため、これを実行したくありません。

ファイルが次のようになるとします。

1 Random junk I don't want to see
2 Care about (foo)
3 Care about (foo)
4 Care about
5 Care about (foo)
6 Other random junk I don't want to see

残念ながら、無視したい行は良いパターンに従わない。そうでなければちょうどgrep -v 'insert pattern here'

lessどういうわけか、次の内容を統合する方法を知りたいです。

2 Care about (foo)
3 Care about (foo)
4 Care about
5 Care about (foo)

grep "foo" bar.log | less私は興味のある4行を無視しているので動作しません。

ベストアンサー1

ある場合はawk、次のようにできます。

awk '/foo/{print b$0;b="";x=1;next} x{b=b$0"\n"}' bar.log | less

aがfoo表示されたら、バッファ(b変数)と現在の行を印刷してバッファを消去します。

fooそれ以外の場合は(変数)がすでに存在する場合にのみ、x現在の行をバッファリングします。

おすすめ記事