我需要 grep 一些文件来查看哪些文件包含某个单词:
grep -l word *
接下来,我需要 grep 该文件列表以查看哪些文件包含不同的单词。最简单的方法可能是编写一个脚本,但我不太知道如何操作它。
答案1
假设所有文件名都不包含空格、单引号、双引号或反斜杠字符(或以 - 开头的 GNU grep
),您可以执行以下操作:
grep -l word * | xargs grep word2
Xargs 将对第一个 grep 中的每个文件运行第二个 grep。
通过 GNU grep
/xargs
或兼容,您可以通过以下方式使其更加可靠:
grep -lZ word ./* | xargs -r0 grep word2
使用-Z
使grep
打印文件名以 NUL 分隔,因此可以与xargs -0
.如果第一个没有找到任何内容,则可以避免运行第二个-r
选项。xargs
grep
grep
答案2
答案3
如果您需要查找包含某个单词的文件,然后过滤掉包含另一个单词的文件,您可以使用如下命令序列:
grep word * | awk -F ':' '{print $1}'|uniq | xargs grep word2
grep word *
- 将显示所有包含“word”的文件,文件名将位于列表中的第一个。awk -F ':' '{print $1}'
- 将仅打印结果的文件名uniq
- 将确保您不会多次打印文件名。xargs grep word2
- 将再次在您获得的文件列表中搜索。