
У меня есть файл с кучей строк журнала.
Я хочу вернуть файлы, содержащие слово «fail», но не содержащие шаблон:
Failed any test here _fr in Pro-any text here
Итак, если он содержит: _fr в Pro-
Затем игнорируйте строку, даже если в ней есть слово 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 неявно читает файл построчно. Условие /[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