Как попросить grep вернуть имена файлов, которые соответствуют строке, игнорируя при этом другие строки? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть несколько файлов журнала, в которых я хотел бы найти ошибки.В этих файлах также есть куча предупреждений, которые часто называются ошибками и другими ложными тревогами.

Сейчас у меня сложный процесс поиска файлов, которые я хочу изучить более внимательно:

grep error *.out | grep -v -e warning -e handle -e Sentry -e exitfuncs | \
awk -F: '{print $1}' | uniq

Я подозреваю, что это может быть более кратким, но я не могу заставить Греп сделать это.Справка?

ввод:

file1.out
error. bad things happened.
error. warning, function deprecated
error. no really, this is bad.

file2.out
error. warning, function deprecated
error. warning, function deprecated

file3.out
error. warning, function deprecated
error. another bad thing here.

желаемый вывод:

file1.out
file3.out

Объяснение текущей команды: ошибка grep * .out возвращает каждую строку из файлов примеров:

file1.out: error. bad things happened.
file1.out: error. warning, function deprecated
...
file3.out: error. another bad thing here.

grep -v -e предупреждение удаляет предупреждения.awk -F: устанавливает разделитель полей равным: и возвращает первое поле из ввода, которое является именем файла.uniq удаляет дубликаты имен файлов, поэтому file1.out не появляется дважды.

1 Ответ

0 голосов
/ 25 апреля 2019

grep для выполнения g/re/p - и все.Для чего-то более сложного, чем это просто используйте awk.Вы можете заменить всю командную строку и распечатать имена файлов с помощью всего лишь одного вызова awk:

awk -F':' '/error/ && !/warning|handle|Sentry|exitfuncs/ && !seen[FILENAME,$1]++{print FILENAME, $1}' *.out

, но может быть лучший подход в зависимости от того, как выглядит ваш ввод, а мы не видим желаемоговывести еще, так что я просто догадываюсь, что вы хотели uniq сделать с именами файлов плюс значения ошибок и узнать, как вы хотели, чтобы общий вывод выглядел ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...