如何使用sed通过shell脚本修改变量

dhxwm5r4  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(147)

我正试图更改正在运行的模型的.dat文件中的值。问题是代码不能简单地用sed -i的/old_text/new_text/'
我试图更改的.dat文件看起来像

0.000E-00          !Argon
7.956E-03          !Methane
0.000E-00          !Ethane
1.945E-03          !Carbon Dioxide
9.901E-01          !Nitrogen
1.000E-40          !Oxygen
0.000E-00          !Hydrogen
0.000E-00          !Nitrogen Dioxide
22                 !Tropopause layer

字符串
我试图改变甲烷,氮气和二氧化碳的值,但我不能简单地告诉它取代‘7. 965 E-03!甲烷',因为在我第一次运行shell脚本后,该值将发生变化。
我试图取代!带有$'变量名'的甲烷!甲烷,但这并没有解决删除数字的问题,在我第一次编译脚本后也不起作用。
当前脚本为

#file=atmos-master-copy1/CLIMA/IO/mixing_ratios.dat                                                                                        
#sed -i 's/Methane.*/'$muCH4_1'    !Methane/' $file


但是我不知道如何通过改变文件开头的内容来启动它。

wgmfuz8q

wgmfuz8q1#

如果要将!Methane的值替换为变量$muCH4_1的值,则:

sed -Ei 's/^\S+\s+(!Methane)$/'"$muCH4_1"' \1/' "$file"

字符串

  • ^-行锚起点
  • \S+-一个或多个非空格字符
  • \s+-一个或多个空白字符
  • (!Methane)-将!Methane捕获到捕获组1
  • $-线路末端锚点

用…代替

  • '"$muCH4_1"'-由变量muCH4_1保存的值
  • ``-文字空间
  • 来自捕获组1的\1-!Methane

注意:为了使第二列像原始文件中一样排列,muCH4_1必须在右侧填充空格。如果这是你想要的,你可以使用printf来做填充:

sed -Ei 's/^\S+\s+(!Methane)$/'"$(printf "%-18s" "$muCH4_1")"' \1/' "$file"

相关问题