我一直在谷歌上搜索,我找不到我正在寻找的答案。
假设我在目录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' ./*
返回与模式匹配的文件
答案 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。