Как я могу grep каталога и записать полную найденную строку в файл - PullRequest
0 голосов
/ 06 марта 2020

В моем каталоге есть строка, которая выглядит так:

Found an error with id: XXXX

Я хочу иметь возможность взять все эти строки и записать их в новый отдельный файл. В настоящее время у меня есть это:

grep -rl "Found an error with id:" . >> errorOutput.txt

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

1 Ответ

1 голос
/ 06 марта 2020

Ваш -l флаг является виновником здесь. Он подавляет содержимое в совпадающих строках и просто распечатывает файлы, содержащие совпадения, из-за рекурсивного поиска -r. Даже без флага -l вы получите результат filename:pattern.

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

grep -r "Found an error with id:" . | awk -F: '{ print $2 }' > results.log

Или просто grep, просто пропустите печать имен файлов с флагом -h (оба варианта FreeBSD и GNU поддерживают это)

grep -rh "Found an error with id:" . > results.log

и BTW awk мощны сами по себе, это может сделать поиск по шаблону сам по себе в файловой системе. Так что вы могли бы сделать

awk '/Found an error with id:/' * > results.log 2>/dev/null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...