2013-02-23 146 views
2

在一個sh腳本中,我試圖遍歷所有匹配以下模式的文件
abc.123基本上是abc。之後只有數字,以下號碼.可以是任意長度。
使用在bash腳本中使用ls命令時的模式匹配

$ shopt -s extglob
$ ls abc.+([0-9])

做的工作,但在終端,而不是通過腳本。我怎樣才能得到符合模式的文件?

+1

你確定腳本是用'bash'運行的,而不是'sh'嗎? – chepner 2013-02-23 00:15:39

+0

謝謝你。這是一個sh腳本 – keeda 2013-02-23 00:16:23

回答

1

,想必你也想成爲POSIX兼容的,你可以使用:

for f in ./* 
do 
    echo "$f" | grep -Eq '^\./abc.[0-9]+$' && continue 
    echo "Something with $f here" 
done 

這將工作正常與空格,引號等文件名,但可能會匹配一些f ilenames換行符,它不應該。

如果您因爲使用bash而對您的問題bash進行了標記,則只需使用您所描述的extglob即可。

2

,如果我理解你的權利,該模式可以轉化爲正則表達式:

^abc\.[0-9]+$ 

,所以你可以

繼續使用ls和grep輸出。例如:

ls *.*|xargs -n1|grep -E '^abc\.[0-9]+$' 

或使用如果您使用sh而不是bashfind

發現有一個選項-regex