2017-07-28 225 views
0

我在包含数百个源代码文件的项目中搜索宏的定义。如何使用grep查找包含2个字符串的文件?

我相当肯定这些宏都是在单个文件中定义的。

如果我做了一个grep -r搜索一个宏,超过1000个命中发生。

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

这可以用grep来完成吗?

例如是这样的:

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

回答

1

用途:

grep -Pzrl "(?s)(MACRO1.+MACRO2\|MACRO2.+MACRO1)" ./ 
  • -P Perl的正则表达式
  • -z改变换行符空字符。
  • -r递归
  • -l只打印文件名

  • (?s)使得.匹配换行符

  • MACRO1.+MACRO2发现当MACRO1是MACRO2前
  • MACRO2.+MACRO1发现当MACRO2是MACRO1
+0

nitpick:'-z'使用空字符作为分隔符而不是换行符...所以如果输入文件包含空字符,它将不会一次读取整个文件。 – Sundeep

+0

@Sundeep:你说得对, – Toto

1

另一种方式是

grep -rlZ 'MACRO1' ./ | xargs -0 grep -l 'MACRO2' 
  • grep -rlZ 'MACRO1' ./会给含有MACRO1
    • -Z是与空字符
  • xargs -0 grep -l 'MACRO2'会给文件名含有分离的文件名的文件名MACRO2
0

与GNU grep

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

它将打印同时包含宏的文件名。

相关问题