2016-08-01 284 views
0

我想使用--include參數傳遞給grep命令(在bash腳本中),搜索的文件擴展名。 這些文件擴展名將由用戶從命令行輸入作爲參數(第4個參數包含文件擴展名,用逗號分隔)。在bash腳本中使用grep命令將變量值傳遞給--include參數

這是我的腳本:

... 
echo "Searching in ${4} files for pattern" 
egrep -irn . --include=\*.{"${4}"} --exclude=\*.{class} -e "${3}" 
... 

我也試圖創建一個與命令的字符串,並調用EVAL,像這樣:

... 
comando="egrep -irn . --include="\\*.{${4}}" --exclude=\*.{class} -e "${3}"" 
echo $comando 
resultado=eval $comando 
echo $resultado 

(呼應COMANDO當我得到這個:的egrep -irn。--include = *。{wsdl,xml} --exclude = *。{class} -e texto,這正是命令行,如果在命令行中執行,則會返回一些匹配項)。

我還試圖傳遞變量與所有的包括參數:

... 
argumento="\\*.{${4}}" 
egrep -irn . --include=$argumento --exclude=\*.{class} -e "${3}" 
... 

這是怎樣的腳本是從命令行調用:

SH ./searchRecursiveIterativeEgrep.sh/TMP /測試/另一個//USR/local/aux /「texto」wsdl,xml

有關如何實現此目的的任何想法? 謝謝

+1

用於查找文件的UNIX工具被恰當地命名爲'find',而不是'grep'。忘記你曾經見過GNU greps選項來尋找文件,因爲添加它們是一個可怕的想法(接下來是什麼 - grep選項來排序輸出?),只需使用find來查找文件和grep來** G ** lobally search對於** R ** egular ** E ** xpression在文件中並** ** ** rint匹配文本。你的生活會更簡單。 –

+0

我想在文件中找到正則表達式,所以我需要grep。該命令按預期工作,但我無法使其與命令行中的參數一起工作。 –

+0

a)grep不是唯一可以在文件中找到正則表達式的工具,b)我並不建議您不要使用grep在文件中查找正則表達式,我建議您不要使用grep來查找文件,因爲這是錯誤的方法,並使您的grep命令變得非常複雜。使用'find'來查找文件和'grep'(或其他工具)以在'find'找到的文件中搜索regexps。一些沿着'發現的路線。 -name'* .extension'-print0 | xargs -0 grep'regexp'。 –

回答

0

我剛剛明白了爲什麼你有一個問題:如果我複製/粘貼生成的命令,它的工作原理,但它在一個shell不。

所以我建議,作爲一種解決方法

argumento="\\*.{${4}}" 
echo egrep -irn . --include=$argumento --exclude=\*.{class} -e "${3}" | sh 

(管道回聲到一個新的外殼做的:它的工作原理)。也許這不是最好的答案,但它能完成這項工作。

也許有人可以解釋,或出來一個更好,更乾淨的答案。

+0

該命令在具有多個擴展名的命令行中工作。 egrep -irn。 --include = \ *。{wsdl,xml} --exclude = \ *。{class} -e texto –

0

你沒有提供任何樣本輸入或預期輸出所以這顯然是未經測試,但正確的做法是用find文件和grep找到 lobally搜索[R egular Ë文件中的壓縮文件和P rint匹配的文本(請參閱其名稱中的提示;-))。例如:

find . -type f -name "*.$4" -print0 | xargs -0 grep -Ein "$3" 

man find,xargs,and grep for details。

相關問題