この質問にはすでに回答があります :POSIX.2の最後のマーカーからEOFへのテキストの取得
(5つの回答)
2年前に閉鎖されました。
Linux
(5つの回答)
2年前に閉鎖されました。
パターン“ ====”の複数のオカレンスを含むファイルがあります 。これらのパターンの後にテキストが続きます。 “ ====”の最後の出現を検索したい パターンを作成し、パターンの後のすべての行を印刷します。 bashでそれを行う方法について何かアイデアはありますか? grep
の組み合わせ 、awk
、sed
またはtail
、など。?
サンプルファイル:
====
First run of script
End of first Script
====
2nd run of script
End of 2nd script
====
3rd run of script
End of 3rd script
コマンドの出力は次のようになります。
3rd run of script
End of 3rd script
承認された回答:
ソフトウェアツール方式。ファイルの末尾のみを読み取り、最後に一致するものが見つかると停止するため、大きなファイルに対してより効率的です。
tac sample.txt | grep -F -m1 -B 999999 '====' | head -n -1 | tac
注:999999
を増減します 必要に応じて、可能な一致よりも長くなります。このコードは、最後の一致が大きなファイルの終わり近くにあることが事前にわかっている場合に最適に機能します。 Glenn Jackmanも参照してください。 awk
のバリエーションを使用したの回答 およびsed
999999
の必要性を回避します 。リソースが非常に少ないシステムの場合、grep
awk
よりも効率的です またはsed
。
推測を避けるために、いくつかの追加されたstat
醜さはうまくいくでしょう:
f=sample.txt; tac "$f" | grep -F -m1 -B $(stat -c '%s' "$f") '====' |
head -n -1 | tac