2017-07-28 61 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' 

它將打印同時包含宏的文件名。

相關問題