如何在 bash 的字符串中查找最后一个带有小数的分组数字



这是这个问题的后续问题,关于如何在 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。

最新更新