我如何grep目录并将找到的完整行写入文件

问题描述 投票:0回答:1

我有一个要在我的目录中查找的字符串,看起来像这样:

Found an error with id: XXXX

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

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

但是仅打印包含该字符串的文件。任何方式我都可以获得带有ID的完整行吗?

linux grep
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

并且BTW awk本身功能强大,它可以在文件系统上自行执行模式搜索。所以你可以做

awk '/Found an error with id:/' * > results.log 2>/dev/null
© www.soinside.com 2019 - 2024. All rights reserved.