2013-06-24 26 views
1

我想搜索一些關鍵詞中是否存在數以百計的XML文件,我想用下面的腳本來處理這個問題:使用egrep的

#!/usr/local/bin/bash 

find . -name '*.xml' |xargs egrep -n "HERE IS LONG LIST(word1|word2|...)" > result 

我得到了錯誤味精如:

xargs: a single arg was greater than the max arglist size of 2048 characters 

所以我改變了一長串成3個部分,併成爲:

#!/usr/local/bin/bash 

find . -name '*.xml' |xargs egrep -n "LIST_1" > result 
find . -name '*.xml' |xargs egrep -n "LIST_2" >> result 
find . -name '*.xml' |xargs egrep -n "LIST_3" >> result 

醫管局任何更好的方法ndle避免模式列表分離的東西?

回答

5

更好的方法是存儲所有匹配模式中的一個文件,並使用遞歸的grep與-f開關:

grep -n -f patternFile -R --include=*.xml . 
+0

我永遠不知道有一個--include選項,我正在尋找:) –

+0

@lzprgmr:'--include = 對遞歸grep非常有用,當它無法使用時:'' grep -R「foo」* .txt'類型的grep命令。 – anubhava

+1

對,用--include,這個「find | xargs grep」是不需要的。 –

1

的grep --help:

樓--file = FILE

:從文件

這樣你就可以得到PATTERN