You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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命令定位目标注释行,替换行首的数值部分,无需依赖原有数值:

  1. 修改甲烷数值(假设变量为$muCH4_1):
file="atmos-master-copy1/CLIMA/IO/mixing_ratios.dat"
sed -i '/!Methane/s/^[[:space:]]*[^[:space:]]*/'"$muCH4_1"'/' "$file"
  1. 修改氮气数值(假设变量为$muN2_1):
sed -i '/!Nitrogen/s/^[[:space:]]*[^[:space:]]*/'"$muN2_1"'/' "$file"
  1. 修改二氧化碳数值(假设变量为$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:42:39