从字符串中提取正/负浮点数

aha*_*jib 3 sed text-processing numeric-data

我试图从一些文本中提取数字。目前我正在使用以下内容:

echo "2.5 test. test -50.8" | tr '\n' ' ' | sed -e 's/[^0-9.]/ /g' -e 's/^ *//g' -e 's/ *$//g' | tr -s ' '
Run Code Online (Sandbox Code Playgroud)

这会给我 2.5,“。” 和 50.8。我应该如何修改第一个sed以便检测浮点数,包括正数和负数?

Joh*_*024 15

grep 很适合这个:

$ echo "2.5 test. test -50.8" | grep -Eo '[+-]?[0-9]+([.][0-9]+)?'
2.5
-50.8
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • -E

    使用扩展正则表达式。

  • -o

    仅返回匹配项,而不返回上下文

  • [+-]?[0-9]+([.][0-9]+)?+

    匹配号码被识别为:

    • [+-]?

      可选的前导标志

    • [0-9]+

      一个或多个数字

    • ([.][0-9]+)?

      后跟一个或多个数字的可选句点。

在一行上获取输出

$ echo "2.5 test. test -50.8" | grep -Eo '[+-]?[0-9]+([.][0-9]+)?' | tr '\n' ' '; echo ""
2.5 -50.8
Run Code Online (Sandbox Code Playgroud)