Grep用于多个文件的多个模式

时间:2011-09-14 20:43:39

标签: grep

我一直在谷歌上搜索,我找不到我正在寻找的答案。

假设我在目录text1.txt中有一个文件mydir,其内容为:

one
two

和另一个名为text2.txt,也在mydir,其内容为:

two
three
four

我正在尝试获取包含我搜索的所有(非任何)模式的文件列表(对于给定目录)。在我提供的示例中,我正在寻找输出的位置:

./text1.txt

./text1.txt:one
./text1.txt:two

我能找到的唯一的事情是关于匹配文件中的任何模式,或者匹配单个文件中的多个模式(我尝试扩展到整个目录,但收到grep使用错误)。

非常感谢任何帮助。

编辑 - 我尝试过的事情

grep "pattern1" < ./* | grep "pattern2" ./*

“模棱两可的重定向”

grep 'pattern1'|'pattern2' ./*

返回与模式匹配的文件

3 个答案:

答案 0 :(得分:9)

一种方式可能是这样的:

find . | xargs grep 'pattern1' -sl | xargs grep 'pattern2' -sl

答案 1 :(得分:4)

我认为这就是你所需要的(你可以轻松添加更多模式)

grep -EH 'pattern1|pattern2' mydir

答案 2 :(得分:2)

改善大脑的答案:

find . -type f -print0 | xargs -0 grep 'pattern1' -slZ | xargs -0 grep 'pattern2' -sl

这将使grep不会尝试搜索目录,并且可以正确处理带空格的文件名,如果将-Z标志传递给grep除了最后一个模式以外的所有模式并将-0传递给xargs。