Ваш -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