如何在bash中的字符串中找到带小数点的最后一组数字

时间:2018-08-20 21:33:54

标签: bash

这是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

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)

在支持的GNU 上进行尝试,并为{em>此处字符串 <<<使用

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。