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

File 如何使用grep查找包含2个字符串的文件?,file,grep,find,File,Grep,Find,我正在一个包含数百个源代码文件的项目中搜索宏的定义 我相当肯定宏都是在一个文件中定义的 如果我对单个宏执行grep-r搜索,则会出现超过1000次点击 我想搜索每个文件,并找到包含两个宏名称的文件 这可以用grep来完成吗 例如,类似这样的事情: grep -r "MACRO1" AND "MACRO2" ./ 使用: -Pperl正则表达式 -z将换行符更改为空字符 -r递归 -l仅打印文件名 (?s)生成匹配换行符 MACRO1.+MACRO2查找MACRO1在MACRO2之前的时间 M

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

我相当肯定宏都是在一个文件中定义的

如果我对单个宏执行
grep-r
搜索,则会出现超过1000次点击

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

这可以用grep来完成吗

例如,类似这样的事情:

grep -r "MACRO1" AND "MACRO2" ./
使用:

  • -P
    perl正则表达式
  • -z
    将换行符更改为空字符
  • -r
    递归
  • -l
    仅打印文件名

  • (?s)
    生成
    匹配换行符

  • MACRO1.+MACRO2
    查找MACRO1在MACRO2之前的时间
  • MACRO2.+MACRO1
    查找MACRO2在MACRO1之前的时间
使用:

  • -P
    perl正则表达式
  • -z
    将换行符更改为空字符
  • -r
    递归
  • -l
    仅打印文件名

  • (?s)
    生成
    匹配换行符

  • MACRO1.+MACRO2
    查找MACRO1在MACRO2之前的时间
  • MACRO2.+MACRO1
    查找MACRO2在MACRO1之前的时间
    • 另一种方法是

      grep -rlZ 'MACRO1' ./ | xargs -0 grep -l 'MACRO2'
      
      • grep-rlZ'MACRO1'。/
        将给出包含
        MACRO1
        • -Z
          是用空字符分隔文件名
      • xargs-0 grep-l'MACRO2'
        将给出包含
        MACRO2
        • 另一种方法是

          grep -rlZ 'MACRO1' ./ | xargs -0 grep -l 'MACRO2'
          
          • grep-rlZ'MACRO1'。/
            将给出包含
            MACRO1
            • -Z
              是用空字符分隔文件名
          • xargs-0 grep-l'MACRO2'
            将给出包含
            MACRO2

            • 带gnu
              grep

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

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

              使用gnu
              grep

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

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

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