从字符串末尾删除数字

Remove digits from end of string

我想删除字符串末尾的数字。

示例:

 string123
 example545

输出:

string
example

如果您在字符串的其他任何地方都没有其他数字,您可以这样做:

echo string123 | sed 's/[0-9]//g'
string

而且只有字符串的结尾:

echo S1tring123 | sed 's/[0-9]\+$//'
S1tring

其中$表示行尾。

不确定是否完全理解您的要求,但请尝试:

sed 's/[0-9]*\([^[:alnum:]]*\)$//' file

或者也许:

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

用 grep

echo S1tring123 | grep -o '.*[^0-9]'
awk '{sub(/[0-9]+$/,"")}1' file

string
example

无需外部工具,只需 parameter expansion 和扩展的 globbing:

$ shopt -s extglob
$ var=string123
$ echo "${var%%+([[:digit:]])}"
string
$ var=example545
$ echo "${var%%+([[:digit:]])}"
example

+(<i>模式</i>)扩展的glob模式是"one or more of this",所以+([[:digit:]])是"one or more digits".

${var%%<i>pattern</i>}扩展意味着“删除最长可能的匹配patternvar.

结束