如何用Shell脚本结合sed修改.dat文件指定变量值
解决.dat文件指定注释行的数值替换问题
问题背景
需要修改目标.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
需求是修改甲烷(Methane)、氮气(Nitrogen)、**二氧化碳(Carbon Dioxide)**对应的行首数值,此前尝试的sed命令无法正确移除原有数值,且首次运行后失效。
解决方案
使用sed命令定位目标注释行,替换行首的数值部分,无需依赖原有数值:
- 修改甲烷数值(假设变量为
$muCH4_1):
file="atmos-master-copy1/CLIMA/IO/mixing_ratios.dat" sed -i '/!Methane/s/^[[:space:]]*[^[:space:]]*/'"$muCH4_1"'/' "$file"
- 修改氮气数值(假设变量为
$muN2_1):
sed -i '/!Nitrogen/s/^[[:space:]]*[^[:space:]]*/'"$muN2_1"'/' "$file"
- 修改二氧化碳数值(假设变量为
$muCO2_1):
sed -i '/!Carbon Dioxide/s/^[[:space:]]*[^[:space:]]*/'"$muCO2_1"'/' "$file"
命令解释
/!Methane/:精准定位包含!Methane注释的行,不受行首数值变化影响。s/^[[:space:]]*[^[:space:]]*/新值/:匹配行首所有空白字符(如果存在)+ 后续非空白字符(即原数值),替换为目标变量值,保留注释部分和原有格式。
如果变量值包含特殊字符,可改用双引号包裹sed命令(需确保变量无/字符):
sed -i "/!Methane/s/^[[:space:]]*[^[:space:]]*/$muCH4_1/" "$file"
内容的提问来源于stack exchange,提问作者jlan160
相关产品推荐
相关产品推荐

