这是this问题的后续问题,涉及如何在bash中查找字符串中的最后一个分组数字。
4个解决方案非常适合原始问题,但是我意识到,如果增加了对小数的支持,则该解决方案将更具适应性。
所以,如果我有
string="123 abc 456.1"
我会得到
456.1
如果我有
string="123 abc 456.1."
我仍然会得到
456.1
如果我有
string="123 abc 456."
我会得到
456
另外,
string="1.2 1.3"
只会返回
1.3
答案 0 :(得分:2)
您可以调整链接的解决方案以获取一个十进制数字,如下所示:
# utility function
lastNum() {
grep -Eo '[[:digit:]]+(\.[[:digit:]]+)?' <<< "$1" | tail -1
}
# Call it as
lastNum '1.2 1.3'
1.3
lastNum '123 abc 456.1.'
456.1
lastNum "123 abc 456."
456
lastNum "123 abc 456.1"
456.1
答案 1 :(得分:1)
在支持grep的GNU pcre上进行尝试,并为{em>此处字符串 <<<
使用bash:
string="123 abc 456.1"
bc -l <<< "$(echo "$string" | grep -oP '.*?\K\d+\.\d*')*1" | awk 'END{print}'
(在所有情况下均有效)
答案 2 :(得分:0)
使用awk
:
$ string="123 abc 456.1"
$ awk '{print $NF+0}' <<< $string
456.1
$ string="123 abc 456."
$ awk '{print $NF+0}' <<< $string
456
$ string="1.2 1.3"
$ awk '{print $NF+0}' <<< $string
1.3
$NF+0
告诉awk
取最后一个元素并在小数上下文中加0。
如果最后一个元素不是数字,则返回值为0。