2016-10-04 28 views
0

我使用一個命令文件遞歸找到含特定string1文件:查找含有多發串

find . -type f -exec grep -H string1 {} \; 

我需要找到一個包含多個字符串的文件,所以命令應返回那些包含所有字符串。類似這樣的:

find . -type f -exec grep -H string1 AND string2 {} \; 

我找不到方法。字符串可以在文件中的任何位置。即使只有兩個字符串的解決方案也不錯。

+0

我可以將你的問題翻譯成一個「egrep」問題:命令egrep -l string1 | string2「'給出所有包含'string1'或'string2'的文件,以防萬一有參數存在'egrep -l「string1 string2」'給出包含'string1'和'string2'的文件,你的問題就解決了。 (不過,我不知道這樣的參數是否存在) – Dominique

回答

0

你也可以試試這個;

find . -type f -exec grep -l 'string1' {} \; | xargs grep -l 'string2' 

這表明包含字符串1和字符串

0

與GNU grep

grep -rlZ 'string1' | xargs -0 grep -l 'string2' 


man grep

-r文件名,--recursive

僅當它們在命令行上時,纔會遞歸讀取每個目錄下的所有文件,並跟隨符號 鏈接。請注意,如果沒有給出文件 操作數,grep將搜索工作目錄。這是相當於-d遞歸選項的 。

-Z, - NULL 輸出一個零字節(ASCII NUL字符),而不是通常跟在文件名後面的字符 。例如,grep -lZ在每個文件名後面輸出一個零字節,而不是通常的換行符。 該選項使輸出清晰,即使在文件名包含不正常 字符(如換行符)的情況下也是如此。該選項可以與find -print0,perl-0,sort -z, 和xargs -0等命令一起使用來處理任意文件名,即使是那些包含換行符的文件名也是如此。

0

你可以連續使用你的行動,並使用第一個退出狀態,才執行第二個,如果第一個是成功的(省略到-and初選默認值之間的運算符):

find . -type f -exec grep -q 'string1' {} \; -exec grep -H 'string2' {} \; 

第一個grep命令使用-q「quiet」,如果找到該字符串,它將返回成功的退出狀態。