2012-03-14 18 views
1

我想創建腳本,使用找到這樣的正則表達式查找parametr:與可變

find . -regex $1 | while read prom; do 
    echo $prom 
done 

我想從選項的正則表達式,但我不能得到這個工作。我嘗試使用一些正則表達式(即「。*(txt)§」)直接而不是1美元,但它沒有幫助。我忘記使用find?

回答

3

是否有任何理由你有括號?嘗試.*txt$作爲你的正則表達式(不是那個有趣的「部分符號」在你的問題中籤名)。

如果你確實想要的括號(如捕獲括號?)你必須做.*\(txt\)$,因爲find默認的正則表達式類型是Emacs風格,其中()文字,並已被逃脫被解釋他們的正則表達式意義。

你也可以做find . -regextype posix-extended -regex '.*(txt)$',注意到-regextype posix-extended這改變了正則表達式來擴展POSIX正則表達式,其中()特殊字符(find -regextype asdf通常會給你一個錯誤信息,列出所有選項,你可以喂在regextype)。

而且,在你的bash腳本,你應該加上引號就在$1

find . -regex "$1" 

(除非$1已經與周圍的引號中,供給在這種情況下無視的建議)。

+0

我的例子應該看起來像'。* \(txt \)$',但我不知道在文本中我必須使用\\(並且那個符號存在應對問題)。你的回答幫助我加引號。謝謝 – 2012-03-14 06:59:56

+0

「(除非$ 1已經被引用了引號,在這種情況下忽略了這個建議)」 - 不,引用到腳本/函數時引用的內容無關緊要:當你「解除引用」變量使用引號。 – 2012-03-14 11:10:03