我有多个包含相同变量的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是否是一个好主意。
答案 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