仅在包含“模式 1”的文件中使用 Grep“模式 2”

仅在包含“模式 1”的文件中使用 Grep“模式 2”

我试图仅在包含另一个字符串“模式 2”的文件中搜索“模式 1”

例如

A.txt 模式 1 ... 模式 2

B.txt 模式 Z ... 模式 2

我打算在本例 A.txt 中过滤掉与模式 1 匹配的文件,然后仅在 A.txt 中搜索模式 2 的出现。

我在下面尝试但不起作用。

grep -rl“模式1”。 -exec grep -或“模式2”+

注意:某些文件路径包含空格。

答案1

您可以通过管道传输到xargs

grep -rlZ "Pattern 1" | xargs -0 grep -l "Pattern 2"

或使用findand grep -q+ grep -l

find . -type f \
  -exec grep -q "Pattern 1" {} \; \
  -exec grep -l "Pattern 2" {} +

xargs选项可能性能更高,因为它将grep一次调用多个文件,而 则会find调用grep每个文件。

相关内容