Modificar parte de una cadena en un script bash

Modificar parte de una cadena en un script bash

Tengo un archivo llamado variables.f90, que tiene muchas líneas que definen diferentes variables, de la siguiente manera::

integer::n_monomer=6800
real*8::rx=5.0d0
#... randomly integer and real numbers defined
real*8::mu_nano=8.0d0
.......
......

y no sé cuál será el valor de mu_nano, puede ser cualquier número real. Ahora quiero modificar la declaración anterior de modo que su valor se incremente en 1 usando el script bash de la siguiente manera::

real*8::mu_nano=9.0d0

Respuesta1

Esto parece fortrancódigo, y no es la mejor idea analizar el código fuente en un lenguaje superior, pero de todos modos... con awk:

awk -F'[=.]' '/nano/{$2++; print $1"="$2"."$3; next}1'

Esto supone que la variable siempre viene dada con un punto. Toma solo una parte entera (entre =y .), aumenta en 1 y vuelve a imprimir todo.

Respuesta2

Para editar en el lugar, usaría perl:

perl -i.bak -pe 's/(?<=mu_nano=)([\d.]+)/ sprintf "%.1f", $1+1 /e' variables.f90

información relacionada