我在 -
上找到了答案http://www.thegeekstuff.com/2011/10/grep-or-and-not-operators/
但是我仍然面临一些问题,要找到包含“String1”而不是“String2”的目录中的所有文件。
我尝试了以下命令,但是除了正确的结果外,它还返回包含两个字符串的文件 -
grep -Hrn "String1" . | grep -v -Hrn "String2"
请纠正我的错误。
答案 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