Ändern eines Teils einer Zeichenfolge im Bash-Skript

Ändern eines Teils einer Zeichenfolge im Bash-Skript

Ich habe eine Datei namens variables.f90, die viele Zeilen enthält, die verschiedene Variablen definieren, wie folgt::

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

und ich weiß nicht, was der Wert von sein wird mu_nano, es kann jede beliebige reelle Zahl sein. Jetzt möchte ich die obige Anweisung so ändern, dass ihr Wert mit dem folgenden Bash-Skript um 1 erhöht wird::

real*8::mu_nano=9.0d0

Antwort1

Das sieht aus wie fortranCode und es ist nicht die beste Idee, Quellcode in einer höheren Sprache zu analysieren, aber trotzdem ... mit awk:

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

Dies setzt voraus, dass die Variable immer mit einem Punkt angegeben wird. Es wird nur der ganzzahlige Teil davon (zwischen =und .) übernommen, um 1 erhöht und alles wieder ausgegeben.

Antwort2

Zum Bearbeiten vor Ort würde ich Perl verwenden:

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

verwandte Informationen