如何使用grep查找包含2个字符串的文件?

时间:2017-07-28 14:35:28

标签: file grep find

我在包含数百个源代码文件的项目中搜索宏的定义。

我很确定这些宏都是在一个文件中定义的。

如果我grep -r搜索单个宏,则会发生超过1000次点击。

我想搜索每个文件,找到包含两个宏名称的文件。

可以用grep完成吗?

例如:

grep -r "MACRO1" AND "MACRO2" ./

3 个答案:

答案 0 :(得分:1)

使用:

grep -Pzrl "(?s)(MACRO1.+MACRO2\|MACRO2.+MACRO1)" ./
  • -P perl regex
  • -z将换行符更改为空字符。
  • -r recursive
  • -l仅打印文件名

  • (?s)使.与新线匹配

  • MACRO1.+MACRO2查找MACRO1何时在MACRO2之前
  • MACRO2.+MACRO1在MACRO2之前找到MACRO1

答案 1 :(得分:1)

另一种方式是

grep -rlZ 'MACRO1' ./ | xargs -0 grep -l 'MACRO2'
  • grep -rlZ 'MACRO1' ./会提供包含MACRO1的文件名
    • -Z用于分隔带有空字符的文件名
  • xargs -0 grep -l 'MACRO2'会提供包含MACRO2
  • 的文件名

答案 2 :(得分:0)

使用gnu grep

grep -lrZ 'macro1' * |xargs -0 grep -l 'macro2'

它将打印包含两个宏的文件名。