特定の単語の複数行を含むテキストブロックを見つけるためにgrepする方法は? tail -fパイプでこれをどのように実行できますか?

特定の単語の複数行を含むテキストブロックを見つけるためにgrepする方法は? tail -fパイプでこれをどのように実行できますか?

ログファイルを追跡して、正規表現パターンに一致するテキストブロックのみを印刷したいと思います.*\n.*\nABC(.*\n){1-6}XYZ。私の正規表現がすでに間違っている場合は、次の例と一致させたいと思います。

TIMESTAMP HERE
LOG ENTRY HEADER
ABC
STUFF
...
STUFF
XYZ

それとも私は何をしますか?本物like は、文字列「ZZZ」が一致のどこにも表示されない場合にのみ、上記の項目を一致させることです。

私の解決策は次のことです。

tail -f file | egrep --line-buffered -B 2 -A 6

しかし、明らかにそれは私が望んでいたよりもはるかに多くの成果を上げました。パッケージをインストールするオプションはありませんが、パッケージがあり利用可能awkですsed

ベストアンサー1

「TIMESTAMP」から「XYZ」までの任意のブロックを選択し、ブロックの後に区切り文字でNULを導入してフィルタリングし、最後からNULバイトを削除するsedなど、他のツールを使用してフィルタリングできます。grep

tail -f file |
  sed -n '/TIMESTAMP/,/XYZ/{/XYZ/s/$/\x00/;p}' |
  grep -z 'ABC' |
  grep -z -v 'ZZZ' |
  tr -d '\x00'

おすすめ記事