如何grep grep的结果?

如何grep grep的结果?

我需要 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选项。xargsgrepgrep

答案2

grep -l word1 $(grep -l word2 *)

或者可能是同一行上的两个单词之一:

grep -w 'word1\|word2' *

这里

答案3

如果您需要查找包含某个单词的文件,然后过滤掉包含另一个单词的文件,您可以使用如下命令序列:

grep word * | awk -F ':' '{print $1}'|uniq | xargs grep word2
  • grep word *- 将显示所有包含“word”的文件,文件名将位于列表中的第一个。
  • awk -F ':' '{print $1}'- 将仅打​​印结果的文件名
  • uniq- 将确保您不会多次打印文件名。
  • xargs grep word2- 将再次在您获得的文件列表中搜索。

相关内容