find + grep 搜索包含多个字符串的文件

find + grep 搜索包含多个字符串的文件

我将以下内容发送到我的命令行:

find /base/dir1 /base/dir2 -type f -exec /x/y/z/grep -e lolol -e wow {} +

这将返回包含一个或两个提供的字符串(lololwow)的每个文件。我想做的是只返回包含两个字符串(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)

希望能帮助到你!

相关内容