这是这个问题的后续问题,关于如何在 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
您可以调整链接的解决方案以获取如下所示的十进制数:
# 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
尝试使用 GNU grep 和 pcre 支持,并使用 bash 进行此处字符串<<<
:
string="123 abc 456.1"
bc -l <<< "$(echo "$string" | grep -oP '.*?Kd+.d*')*1" | awk 'END{print}'
(适用于所有情况(
使用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。