2016-07-22 78 views
0

我試圖刪除使用參數擴展從字符串的結尾一些數字,如:你可以使用shell參數擴展匹配數字嗎?

export ENV=dev12 
echo ${ENV##[0-9]+} 

但它不工作,我無法找到如何做到這一點的谷歌什麼?有人知道嗎?

+1

'$ {VAR ## ...}'中移除了來自字符串的_beginning_。要從最後刪除,請使用'$ {var %% ...}'。 – twalberg

回答

1

參數擴展使用水珠語法,而不是grep和其他工具使用更規範的正則表達式的語法。您還必須使用%%,因爲##用於前綴。

這裏沒有普通的水珠相當於你想做的事,但因爲你是使用bash你可以可以啓用extglob和使用+([0-9])

shopt -s extglob 
ENV=dev12 
echo ${ENV%%+([0-9])} 
1

使用bash正則表達式,你可以這樣做:

str='dev12' 
[[ $str =~ ^(.*[^[:digit:]])[[:digit:]]+$ ]] && echo "${BASH_REMATCH[1]}" 

dev 
+0

我對此投票,因爲它太棒了,但對於我想要做的太複雜了,有趣的回答雖然 – sloven

+0

它看起來很複雜,但是正則表達式提供了glob(或擴展glob)永遠不會匹配的功能。例如,要從結尾刪除一個十進制數而不是整數,不能用glob來解決,但可以使用正則表達式輕鬆解決。 – anubhava

+0

我同意正則表達式非常強大,但我能夠使用glob刪除十進制數:'$ {ENV %% +([0-9])。*}'將處理:'dev12.0','dev12。 12345'和'12.' – sloven

相關問題