使用github.com/mikefarah/yq向YAML文件插入元素失败求助
使用mikefarah/yq 4.26.1添加YAML节点的正确方法
现有YAML内容
category: toolSettings: settings.xml
需要添加的节点片段
env: variables: - user: ABC - passowrd: BCD
期望最终YAML结构
category: env: variables: - user: ABC - passowrd: BCD toolSettings: settings.xml
已尝试的无效命令
- 命令1:
yq e '."category" +=({env: {variables:[ {"user":"ABC"},{"passowrd":"BCD"}]}})' jules.yml > tmp.yml - 命令2:
yq -i '.category.env.variables[0].user="ABC"' jules.yml > tmp.yml yq -i '.category.env.variables[1].passowrd="BCD"' jules.yml > tmp.yml
正确解决方法
原因分析
- 第二个命令无效是因为
category下原本不存在env节点,yq无法直接给不存在的父节点的子节点赋值,必须先创建env节点。 - 第一个命令思路接近,但
+=的合并逻辑在部分场景下不如直接赋值或merge操作直观可靠。
可行命令
方法1:直接赋值创建env节点
生成新文件:
yq e '.category.env = {variables: [{user: "ABC"}, {passowrd: "BCD"}]}' jules.yml > tmp.yml
原地修改原文件:
yq -i '.category.env = {variables: [{user: "ABC"}, {passowrd: "BCD"}]}' jules.yml
方法2:使用merge操作合并节点
适合保留category原有内容的同时添加新节点:
生成新文件:
yq e '.category |= merge({env: {variables: [{user: "ABC"}, {passowrd: "BCD"}]}})' jules.yml > tmp.yml
原地修改:
yq -i '.category |= merge({env: {variables: [{user: "ABC"}, {passowrd: "BCD"}]}})' jules.yml
内容的提问来源于stack exchange,提问作者abhi c
相关产品推荐
相关产品推荐

