如何在bash中从字符串中获取最后一个数字?

Pho*_*ocs 4 linux bash shell

对不起,我会更好地解释一下

如何从字符串中获取最后一个数字?

泛型字符串的示例:

If str=str1s2
echo $str | cmd? 
I get 2

If str=234ef85
echo $str | cmd? 
I get 85

 If str=djfs1d2.3
echo $str | cmd? 
I get 3
Run Code Online (Sandbox Code Playgroud)

"CMD?" 是我想要的命令/脚本

Geo*_*iou 9

您所需要的只是 grep -Eo '[0-9]+$':

gv@debian:~$ echo 234ef85 |grep -Eo '[0-9]+$'          ## --> 85
gv@debian:~$ echo 234ef856 |grep -Eo '[0-9]+$'         ## --> 856
gv@debian:~$ echo 234ef85d6 |grep -Eo '[0-9]+$'        ## --> 6
gv@debian:~$ echo 234ef85d.6 |grep -Eo '[0-9]+$'       ## --> 6
gv@debian:~$ echo 234ef85d.6. |grep -Eo '[0-9]+$'      ## --> no result
gv@debian:~$ echo 234ef85d.6.1 |grep -Eo '[0-9]+$'     ## --> 1
gv@debian:~$ echo 234ef85d.6.1222 |grep -Eo '[0-9]+$'  ## --> 1222
Run Code Online (Sandbox Code Playgroud)

  • 请您解释一下 grep -Eo 和 '[0-9]+$' 吗? (2认同)
  • -E:扩展grep,-o:只获取匹配的部分。在正则表达式部分,它在 $ 标记的行尾之前找到一个或多个数字 ([0-9]+) (2认同)

cho*_*oba 8

您可以使用extglob参数扩展.首先,从末尾删除数字,然后删除从头开始的数字.

#!/bin/bash
shopt -s extglob
for str in str1s2 djfs1d2.3 fefwfw4rfe45 234ef8 ; do
    without_number=${str%%+([0-9])}
    echo ${str#$without_number}
done
Run Code Online (Sandbox Code Playgroud)

  • 做得好.我倾向于新的东西.**复合图案**.启用*extglob*后,还有5个*复合模式*可用.(参见:关于'男子打击'的'1403`或者约'1403`这个...我已经做了很长时间了``)` (2认同)