带有“String1”而不是“String2”的文件的grep命令

我经历了答案 –

  1. Grep正则expression式不包含string

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

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

我尝试了下面的命令,但随着正确的结果,它也返回包含两个string的文件 –

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

请纠正我的错误。

你可以使用-L标志:

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

首先找到包含“String2”的文件,然后运行这些文件并找到包含“String1”的文件:

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

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