Com o GNU awk
:
gawk -v RS='[-+]?[0-9.]+[eE][-+]?[0-9]+' \
-v ORS= \
-v CONVFMT=%.1000g '{print $0 (RT == "" ? "" : +RT)}'
gawk
armazena o que é correspondido pelo separador de registro na variável RT
que convertemos em ponto flutuante sem expoente com o CONVFMT
.
Para maior precisão, por exemplo, para 1e123
ser transformado em 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
em vez de 999999999999999977709969731404129670057984297594921577392083322662491290889839886077866558841507631684757522070951350501376
, com gawk 4.1 ou superior, adicione -M -v PREC=1000
(1000 é o número de bits )