更改多个代码文件中相同变量的值

时间:2015-02-24 13:32:08

标签: replace find fortran

我有多个包含相同变量的f90文件

integer,parameter :: ilatmin = 0.5
integer,parameter :: ilatmax = 180
integer,parameter :: ilonmin = 0.5
integer,parameter :: ilonmax = 360

我想编写shell脚本或makefile,我指定每个变量的值,并循环遍历每个.f90文件并更新每个变量的值。

我虽然在这个示例Linux find and replace中使用搜索和替换,但是想知道在bash脚本中使用sed是否是一个好主意。

1 个答案:

答案 0 :(得分:1)

为什么不将这些参数放入use文件中*.f90的模块中?它可能看起来像:

module myParameters
  implicit none
  integer,parameter :: ilatmin = 0.5
  integer,parameter :: ilatmax = 180
  integer,parameter :: ilonmin = 0.5
  integer,parameter :: ilonmax = 360
end module

在您的代码中,您可以包含该模块,例如

subroutine foo
  use myParameters, only: ilatmin, ilatmax, ilonmin, ilonmax
  ! ...
end subroutine

现在您只需要更改模块myParameters ...


对于您的问题...使用sed这可能看起来像:

for i in *.f90; do
  sed -i -e 's/ilatmin = .*$/ilatmin = XYZ/g' \
         -e 's/ilatmax = .*$/ilatmax = XYZ/g' \
         -e 's/ilonmin = .*$/ilonmin = XYZ/g' \
         -e 's/ilonmax = .*$/ilonmax = XYZ/g' $i
done