从字符串末尾删除数字

时间:2018-01-06 19:47:25

标签: bash awk grep gnuwin32

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

示例:

 string123
 example545

输出:

string
example

5 个答案:

答案 0 :(得分:7)

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

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

+(pattern)扩展的glob模式是“其中的一个或多个”,因此+([[:digit:]])是“一个或多个数字”。

${var%%pattern}扩展意味着“从pattern的末尾删除 var 的最长匹配。

答案 1 :(得分:3)

如果您可以在字符串中的任何其他位置没有其他数字:

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

只有字符串的结尾:

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

$表示该行的结尾。

答案 2 :(得分:2)

使用grep

echo S1tring123 | grep -o '.*[^0-9]'

答案 3 :(得分:1)

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

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

或者也许:

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

答案 4 :(得分:1)

awk '{sub(/[0-9]+$/,"")}1' file

string
example