
たくさんのログ行を含むファイルがあります。
「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 では、 は論理積を意味し、 は論理否定を意味します。Fail
fail
_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