ログファイルを追跡して、正規表現パターンに一致するテキストブロックのみを印刷したいと思います.*\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'