grep funciona bem para isso:
$ echo "2.5 test. test -50.8" | grep -Eo '[+-]?[0-9]+([.][0-9]+)?'
2.5
-50.8
Como funciona
-
-EUse regex estendido.
-
-oRetorna apenas as correspondências, não o contexto
-
[+-]?[0-9]+([.][0-9]+)?+Corresponder números identificados como:
-
[+-]?Um sinal principal opcional
-
[0-9]+Um ou mais números
-
([.][0-9]+)?Um período opcional seguido por um ou mais números.
-
Obtendo a saída em uma linha
$ echo "2.5 test. test -50.8" | grep -Eo '[+-]?[0-9]+([.][0-9]+)?' | tr '\n' ' '; echo ""
2.5 -50.8