花了几个小时试图用这个问题的部分答案自己回答这个问题;所以我很抱歉,如果这已经得到了回答,但结合我能找到的部分解决方案来正确执行此搜索似乎超出了我的范围.
我正在尝试做的事情:在目录中搜索包含多个唯一字符串的文件,文件中任何位置的任何顺序,但不包含文件中任何位置的其他特定字符串.
这是我到目前为止的搜索:
pcregrep -riM '^(?=.*uniquestringA)(?=.*uniquestringB)(?=.*uniquestringC)(?=.*uniquestringD)(?=.*uniquestringE).*$' . | xargs grep -Li 'uniquestringZ'
我意识到这是可怕的,可怕的错误,因为我甚至似乎无法让多行搜索工作而忽略字符串出现的顺序.
任何帮助是极大的赞赏.
解决方法
虽然它需要大量的grep调用,但您可以使用find和grep以简单且符合POSIX的方式编写它:
find . -type f \ -exec grep -q "stringA" {} \; \ -exec grep -q "stringB" {} \; \ -exec grep -q "stringC" {} \; \ -exec grep -q "stringD" {} \; \ ! -exec grep -q "stringZ" {} \; \ -print # or whatever to do with matches