
У меня есть файл с именем variables.f90
, содержащий множество строк, определяющих различные переменные, как показано ниже ::
integer::n_monomer=6800
real*8::rx=5.0d0
#... randomly integer and real numbers defined
real*8::mu_nano=8.0d0
.......
......
и я не знаю, каким будет значение mu_nano
, это может быть любое действительное число. Теперь я хочу изменить приведенное выше выражение так, чтобы его значение увеличивалось на 1 с помощью скрипта bash следующим образом ::
real*8::mu_nano=9.0d0
решение1
Это похоже на fortran
код, и это не самая лучшая идея — анализировать исходный код на более высоком языке, но в любом случае... с помощью awk
:
awk -F'[=.]' '/nano/{$2++; print $1"="$2"."$3; next}1'
Это предполагает, что переменная всегда указана с точкой. Она берет только целую часть (между =
и .
), увеличивает на 1 и выводит все обратно.
решение2
Для редактирования на месте я бы использовал Perl:
perl -i.bak -pe 's/(?<=mu_nano=)([\d.]+)/ sprintf "%.1f", $1+1 /e' variables.f90