grep
funciona bem para isso:
$ echo "2.5 test. test -50.8" | grep -Eo '[+-]?[0-9]+([.][0-9]+)?'
2.5
-50.8
Como funciona
-
-E
Use regex estendido.
-
-o
Retorna 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