![find + grep 搜索包含多个字符串的文件](https://linux22.com/image/174885/find%20%2B%20grep%20%E6%90%9C%E7%B4%A2%E5%8C%85%E5%90%AB%E5%A4%9A%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%87%E4%BB%B6.png)
我将以下内容发送到我的命令行:
find /base/dir1 /base/dir2 -type f -exec /x/y/z/grep -e lolol -e wow {} +
这将返回包含一个或两个提供的字符串(lolol
和wow
)的每个文件。我想做的是只返回包含两个字符串(AND而不是OR)的文件。如果可能的话我怎样才能做到这一点?
编辑:搜索到的字符串需要出现在返回的每个文件中,但不一定位于同一行。
编辑2:我没有 -r 或 -R 选项
答案1
也许使用 GNU awk 而不是 grep:
find /base/dir1 /base/dir2 -type f -exec gawk '
FNR == 1 {p1 = p2 = 0}
/lolol/ {p1 = 1}
/wow/ {p2 = 1}
p1 && p2 {print FILENAME; nextfile}
' {} +
答案2
我找不到使用相同的方法来做到这一点find
,所以我尝试比较两个 grep 的结果,这就是我想到的:
comm -12 <(find . -type f -exec grep -l lolol {} + | sort) <(find . -type f -exec grep -l wow {} + | sort)
希望能帮助到你!