用于“String1”而不是“String2”的文件的grep命令

时间:2016-04-06 07:11:07

标签: linux string macos terminal grep

我在 -

上找到了答案
  1. Grep regex NOT containing string

  2. http://www.thegeekstuff.com/2011/10/grep-or-and-not-operators/

  3. 但是我仍然面临一些问题,要找到包含“String1”而不是“String2”的目录中的所有文件。

    我尝试了以下命令,但是除了正确的结果外,它还返回包含两个字符串的文件 -

    grep -Hrn "String1" . | grep -v -Hrn "String2" 
    

    请纠正我的错误。

2 个答案:

答案 0 :(得分:3)

您可以使用-L标志:

-L, --files-without-match  print only names of FILEs containing no match

首先,您找到包含" String2"的文件,然后运行这些文件并找到 包含的文件"字符串1":

$ grep -L "String2" * | xargs grep -nH "String1"

答案 1 :(得分:1)

使用Awk很容易。

awk 'FNR==1 { if (NR>1 && one && !other) print prev; one=other=0; prev=FILENAME }
    /string1/ { one=1 }
    /string2/ { other=1 }
    END { if (one && !other) print prev }' list of files