Grep-файлы с регулярным выражением

Grep-файлы с регулярным выражением

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

Я хочу вернуть файлы, содержащие слово «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

Связанный контент