Bash 从字符串末尾删除数字

Bash 从字符串末尾删除数字,bash,awk,grep,gnuwin32,Bash,Awk,Grep,Gnuwin32,我想删除字符串末尾的数字 例如: string123 example545 输出: string example 如果字符串中没有其他数字,则可以执行以下操作: echo string123 | sed 's/[0-9]//g' string 并且只有字符串的末尾: echo S1tring123 | sed 's/[0-9]\+$//' S1tring 其中,$表示行尾。如果字符串中没有其他数字,则可以执行以下操作: echo string123 | sed 's/[0-9]//g

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

例如:

 string123
 example545
输出:

string
example

如果字符串中没有其他数字,则可以执行以下操作:

echo string123 | sed 's/[0-9]//g'
string
并且只有字符串的末尾:

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

其中,
$
表示行尾。

如果字符串中没有其他数字,则可以执行以下操作:

echo string123 | sed 's/[0-9]//g'
string
并且只有字符串的末尾:

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

其中,
$
表示行尾。

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

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

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

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

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

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

echo S1tring123 | grep -o '.*[^0-9]'
和格雷普

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

没有外部工具,只需扩展全局搜索:

$ shopt -s extglob
$ var=string123
$ echo "${var%%+([[:digit:]])}"
string
$ var=example545
$ echo "${var%%+([[:digit:]])}"
example
+(模式)
扩展的全局模式是“其中的一个或多个”,因此
+([[:digit:])
是“一个或多个数字”


${var%%pattern}
扩展意味着“从
var

末尾删除
pattern
的最长匹配项,无需外部工具,只需扩展全局搜索:

$ shopt -s extglob
$ var=string123
$ echo "${var%%+([[:digit:]])}"
string
$ var=example545
$ echo "${var%%+([[:digit:]])}"
example
+(模式)
扩展的全局模式是“其中的一个或多个”,因此
+([[:digit:])
是“一个或多个数字”


${var%%pattern}
扩展意味着“从
var

的末尾删除
pattern
的最长匹配项,如果字符串包含“S1tring123”,我只希望删除结尾数字,所以删除数字直到alpha类型的东西好吧,在第一个中很重要,因为这将只删除第一个数字:)如果字符串包含“S1tring123”怎么办我只想删除结尾的数字,因此,删除数字直到alpha类型的东西好吧,这在第一个数字中很重要,因为这只会删除第一个数字:)下面的任何一个回答你的问题吗?是的,我已经勾选了一个答案:),对不起,我不知道这为什么被否决。这里的一些人当然自命不凡。@HH可能是因为它看起来很像一个家庭作业问题,没有明显的努力(或至少没有演示)来找到答案。他们对此很恼火。当然,现在我也在尝试做类似的事情,我的搜索结果让我来到这里,下面的问题有没有答案?是的,我已经勾选了答案:),对不起,我很抱歉,我不知道为什么会被否决。这里的一些人当然自命不凡。@HH可能是因为它看起来很像一个家庭作业问题,没有明显的努力(或至少没有演示)来找到答案。他们对此很恼火。当然,现在我正在尝试做类似的事情,我的搜索结果告诉我如何再次禁用extglob?@Hubert
shopt-uextglob
如何再次禁用extglob?@Hubert
shopt-uextglob