2016-07-22 75 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

相关问题