1

У меня есть файл с кучей строк журнала.

Я хочу вернуть файлы, содержащие слово «fail», но не содержащие шаблон:

Failed any test here _fr in Pro-any text here

Так что, если он содержит:_fr в Pro-

Затем игнорируйте строку, даже если в ней есть слово fail.

1 ответ1

3

Давайте рассмотрим этот тестовый файл:

$ 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .