他のパターンの前に最後に表示されるパターンを取得します。

他のパターンの前に最後に表示されるパターンを取得します。

次のファイルから:

...
Pattern2:TheWrongBar
foo 
Pattern2:TheRightBar
foo 
First Pattern
foo
...

Pattern2この条件の前に発生したこの条件の最後の発生を見つける必要があります。First PatternPattern2:TheRightBar

私の最初の考えは、以前の残りのファイルをすべてインポートすることでしたFirst pattern

sed -e '/First Pattern/,$d' myfile | tac | grep -m1 "Pattern I need to get"

このコードを最適化する方法はありませんか?

ベストアンサー1

そしてawk

awk '/Pattern2/ {line=$0; next}; /First Pattern/ {print line; exit}' file.txt
  • /Pattern2/ {line=$0; next}:パターンPattern2が一致したら、その行を変数に保存しlineて次の行に移動します。

  • /First Pattern/ {print line; exit}:見つかったら、First Pattern変数を印刷しlineて終了します。

例:

% cat file.txt                                                                 
...
Pattern2:TheWrongBar
foo 
Pattern2:TheRightBar
foo 
First Pattern
foo
...

% awk '/Pattern2/ {line=$0; next}; /First Pattern/ {print line; exit}' file.txt
Pattern2:TheRightBar

おすすめ記事