我希望从字符串的末尾删除数字。
例如:
string123
example545
输出:
string
example
string123
example545
输出:
string
example
不需要外部工具,只需使用参数扩展和扩展的globbing:
$ shopt -s extglob
$ var=string123
$ echo "${var%%+([[:digit:]])}"
string
$ var=example545
$ echo "${var%%+([[:digit:]])}"
example
< p > +(pattern)
扩展的 glob 模式是 "一个或多个此类",因此 +([[:digit:]])
表示 "一个或多个数字"。
${var%%pattern}
扩展意味着 "从 var
的末尾删除最长可能匹配的 pattern
。"
shopt -u extglob
- Benjamin W.假设字符串中没有其他数字,您可以这样操作:
echo string123 | sed 's/[0-9]//g'
string
仅限于字符串的尾部:
echo S1tring123 | sed 's/[0-9]\+$//'
S1tring
$
表示行末。
awk '{sub(/[0-9]+$/,"")}1' file
string
example
echo S1tring123 | grep -o '.*[^0-9]'
我不确定是否完全理解您的要求,但尝试如下:
sed 's/[0-9]*\([^[:alnum:]]*\)$/\1/' file
或许:
sed 's/[0-9]*\([^0-9]*\)$/\1/' file