You need to enable JavaScript to run this app. 如何使用Mike Farah yq v4 eval原地追加YAML details键
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Mike Farah yq v4 eval原地追加YAML details键

yq v4 原地修改YAML文件的实现方法

你使用的Mike Farah开发的yq v4(4.5.1版本)已经重构了旧版的命令体系,旧版独立的write命令已整合进eval(简写为e)子命令,原地修改参数仍为-i,无需像旧版那样逐次调用命令反复写入,可一次性完成完整结构的追加操作。

一次性写入完整details列表(推荐方案)

直接通过赋值表达式写入完整列表结构,单条命令完成全部修改,不会破坏原有文件的键顺序和内容:

./bin/yq e -i '.details = [
  {"name": "banana", "color": "yellow"},
  {"name": "apple", "color": "red"}
]' file.yaml

执行后生成的文件结构和你预期的效果基本一致——需要注意的是,你列出的预期结构中将原有的some_dummy_key键误拼写为somme_dummy_key,上述命令不会修改原有键的拼写,与原文件内容完全保持一致。

逐次追加列表条目(兼容旧版操作逻辑)

如果需要分步写入列表内容,和旧版的逐条操作习惯对齐,可使用以下命令分步执行:

  • 初始化第一个列表条目,单条命令完成两个字段的赋值
    ./bin/yq e -i '.details[0].name = "banana" | .details[0].color = "yellow"' file.yaml
    
  • 追加第二个列表条目到列表末尾
    ./bin/yq e -i '.details += [{"name": "apple", "color": "red"}]' file.yaml
    

关键语法说明

  • v4版本无需提前初始化空的details列表,直接对不存在的索引位置赋值时,yq会自动补全中间缺失的空结构
  • 使用+=操作符追加列表内容时,会自动将新内容合并到现有列表的末尾,不会覆盖已有的列表项
  • 单条命令中可通过管道符串联多个赋值操作,减少重复读写文件的开销

新旧版本命令对应参考
旧版命令 yq write -i file.yaml details.[0].name banana,在v4中等价于 yq e -i '.details[0].name = "banana"' file.yaml


内容的提问来源于stack exchange,提问作者Manasa Reddy Bethi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 19:36:10