如何对从前一个 grep 返回的文件执行第二个 grep?

Che*_*hev 8 mac terminal bash grep macos

我经常发现自己使用 grep 搜索一堆代码来确定我要查找的内容。有时我得到的文件列表比我希望的要长一点。此时我想执行第二次 grep,但只搜索第一次 grep 搜索返回的文件。有没有办法做到这一点?我基本上想交叉引用两个 grep 搜索,并且只取回包含两个结果的文件。

jim*_*-cl 12

grep -lZ "first string" * | xargs -0 grep -l "second string"
Run Code Online (Sandbox Code Playgroud)
  • 首先grep将返回包含first string.

  • Secondgrep会做同样的事情second string,但会超过第一个的结果grep

  • -Z参数的grep和-0参数xargs的共同努力,启用文件名包含空格的支持。


编辑 - 感谢Ajedi32

xargs 允许您使用命令的结果作为另一个命令的参数。

xargsWikipedia 文章中xargs 是 Unix 和大多数类 Unix 操作系统上的命令,用于从标准输入构建和执行命令行。

  • @AlexFord - 来自 [`xarg` 的维基百科文章](http://en.wikipedia.org/wiki/Xargs),*xargs 是 Unix 和大多数类 Unix 操作系统上用于构建和执行命令的命令来自标准输入的行。*。换句话说,它允许您将一个命令的结果用作另一个命令的标准输入。尝试使用相同的命令但没有 `xargs`,你会看到问题(`grep -l "first string" * | grep -l "second string"`) (3认同)
  • @jim“它允许您将命令的结果用作另一个命令的标准输入”不,这就是管道的作用。xargs 允许您将一个命令的结果用作另一个命令的*参数*。 (2认同)