2011-09-14 24 views
5

我一直在搜索Google,並且找不到我要找的答案。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' ./* 

收益匹配任何一種模式的

+0

什麼是使用錯誤消息?你試過的命令是什麼? –

回答

8

的一種方法是這樣的文件:

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

或這樣的替代:'grep -rl'pattern1'| xargs grep'pattern2'-l' –

+0

'grep -rlZ'pattern1'| xargs --null grep'pattern2'-l'對於文件名是更加安全的。 – Kal

3

我瘦了k該設計是你所需要的(你可以輕鬆添加更多的模式)

grep -EH 'pattern1|pattern2' mydir 
+1

這是一個or,OP想要一個和 –

2

要細化大腦的回答是:

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

這將讓grep的從試圖搜索目錄,並能妥善處理與空格的文件名,如果你將-Z標誌傳遞給除最後一個模式外的所有grep,並將-0傳遞給xargs。