2014-07-10 97 views
2

我想提取子字符串,直到最後一個數字結束。unix shell子字符串?

例如:

在字符串 「abcd123z」,我想輸出是 「abcd123」

在字符串 「abcdef123gh01yz」,我想輸出是 「abcdef123gh01」

在字符串「abcd123」中,我希望輸出爲「abcd123」

如何在unix shell中執行此操作?

回答

2

試試這個sed命令,

sed 's/^\(.*[0-9]\).*$/\1/g' file 

例子:

$ echo 'abcdef123gh01yz' | sed 's/^\(.*[0-9]\).*$/\1/g' 
abcdef123gh01 
1

您可以在BASH正則表達式做到這一點:

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

這不會在KSH – hek2mgl

+0

工作是我清楚地提到了BASH,因爲它自帶OP標籤'BASH'的問題 – anubhava

+0

他標記了bash *和* ksh – hek2mgl

1
tmp="${str##*[0-9]}"  # cut off all up to last digit, keep intermediate 
echo "${str%$tmp}"  # remove intermediate from end of string