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

如何用Linux sed替换YAML文件数组末尾元素且不破坏缩进

用sed实现YAML特定行数组末尾元素替换

核心命令

假设你要把目标行数组的最后一个元素改成10,直接用这条sed命令即可:

sed -E '/^[[:space:]]*variable: / s/([[:space:]]*,[[:space:]]*)([0-9]+(\.[0-9]+)?)([[:space:]]*]$)/\110\4/' your_file.yaml

命令逻辑拆解

  • /^[[:space:]]*variable: /:专门定位目标行——不管行前有多少空格/制表符缩进,只要是以variable: 开头的行,才会被处理,完全不碰其他行
  • 替换部分的正则精准锁定要修改的位置:
    • 先捕获最后一个元素前的逗号和前后可能的空格(比如, 或者, ),这部分原封不动保留
    • 再捕获要替换的数字(支持整数如3、浮点数如4.2),直接换成你需要的10
    • 最后捕获数字后的空格和数组结尾的],这部分也原封不动保留,确保缩进和原有格式完全不变

实际效果示例

如果原行是:

variable: [1, 2, 3]

执行命令后会变成:

variable: [1, 2, 10]

如果原行有浮点数和不规则空格:

variable: [ 0.5,  1.8 ,  4.2 ]

执行后会变成:

variable: [ 0.5,  1.8 ,  10 ]

直接修改原文件(谨慎操作)

如果要直接修改原文件,记得先备份,然后加上-i参数:

sed -i -E '/^[[:space:]]*variable: / s/([[:space:]]*,[[:space:]]*)([0-9]+(\.[0-9]+)?)([[:space:]]*]$)/\110\4/' your_file.yaml

内容的提问来源于stack exchange,提问作者Josh.h

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:04:56