我在包含数百个源代码文件的项目中搜索宏的定义。
我很确定这些宏都是在一个文件中定义的。
如果我grep -r
搜索单个宏,则会发生超过1000次点击。
我想搜索每个文件,找到包含两个宏名称的文件。
可以用grep完成吗?
例如:
grep -r "MACRO1" AND "MACRO2" ./
答案 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'
它将打印包含两个宏的文件名。