Давайте рассмотрим этот тестовый файл:
$ 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 неявно читает файл построчно. Условие /[fF]ail/ && ! /_fr in Pro-/
соответствует любой строке, которая содержит Fail
или fail
но не содержит _fr in Pro-
. В awk &&
означает логическое-а и !
значит логично-нет.
Отказ от _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