0

我的目录中有一个字符串,我正在寻找它,如下所示:

Found an error with id: XXXX

我希望能够获取所有这些行并将它们写入一个新的单独文件。目前我有这个:

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

但这只会打印包含该字符串的文件。有什么办法可以让我得到完整的 id 行吗?

4

1 回答 1

1

你的-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

而且BTWawk本身很强大,它可以自己在文件系统上进行模式搜索。所以你可以做

awk '/Found an error with id:/' * > results.log 2>/dev/null
于 2020-03-06T17:05:36.317 回答