正規表現でファイルをGrepする

正規表現でファイルをGrepする

たくさんのログ行を含むファイルがあります。

「fail」という単語を含むが、パターンを含まないファイルを返したい:

Failed any test here _fr in Pro-any text here

したがって、Proに_frが含まれている場合、

次に、行に fail という単語が含まれていても無視します。

答え1

次のテスト ファイルを検討してみましょう。

$ cat >test.log
keep fail
omit fail  _fr in Pro-

条件に一致するすべての行を検索するには:

$ awk '/[fF]ail/ && ! /_fr in Pro-/' test.log
keep fail

条件に一致する行を含むファイルの名前だけを印刷するには:

$ awk '/[fF]ail/ && ! /_fr in Pro-/ {print FILENAME; exit}' *.log
test.log

使い方:

Awk は暗黙的にファイルを 1 行ずつ読み取ります。条件は、 またはを含み、 を含まない/[fF]ail/ && ! /_fr in Pro-/行と一致します。awk では、 は論理積を意味し、 は論理否定を意味します。Failfail_fr in Pro-&&!

両方を拒否し_fr in Pro-_en in Pro-

次のテスト ファイルを検討してください。

$ cat test.log
keep fail
omit fail  _fr in Pro-
omit fail  _en in Pro-

両方のフォームを拒否するには:

$ awk '/[fF]ail/ && ! /_(fr|en) in Pro-/' test.log
keep fail

関連情報