我经历了答案 –
但我仍然面临一些问题,以查找包含“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