使用yq更新yaml阵列

使用yq更新yaml阵列,yaml,yq,Yaml,Yq,我有以下yaml,我想替换命令字段 有 apiVersion:batch/v1 种类:工作 元数据: 姓名:test004 规格: 模板: 规格: 容器: -名称:“eee” 图片:“测试” 命令:[“a”、“b”、“c”] 想要 apiVersion:batch/v1 种类:工作 元数据: 姓名:test004 规格: 模板: 规格: 容器: -名称:“eee” 图片:“测试” 命令:[“a”、“b”、“c”、“d”] yq-in--style myfile.yaml'spec.templ

我有以下yaml,我想替换命令字段

apiVersion:batch/v1 种类:工作 元数据: 姓名:test004 规格: 模板: 规格: 容器: -名称:“eee” 图片:“测试” 命令:[“a”、“b”、“c”] 想要

apiVersion:batch/v1 种类:工作 元数据: 姓名:test004 规格: 模板: 规格: 容器: -名称:“eee” 图片:“测试” 命令:[“a”、“b”、“c”、“d”]
yq-in--style myfile.yaml'spec.template.spec.containers[0]。命令“[“a”、“b”、“c”、“d””

有没有办法用wq实现这一点,我尝试使用style,但没有成功,如果我将其更改为简单字符串,它就可以工作,但不是在我想传递完整数组时,有什么想法吗?

您可以使用字段
[+]
表示法。因此,您的命令将导致

yq--style double w-i myfile.yaml'spec.template.spec.containers[0]。命令[+]'“c”
上面的命令将条目
“c”
附加到数组中

或者,如果要更新整个数组
命令
,可以在v4中执行。请注意,这将在不同的行中创建数组项,而不是OP中显示的行。请参阅

yqe'.spec.template.spec.containers[0]。命令|=[“a”、“b”、“c”、“d”]|……style=“double”yaml


请注意,yqv4已经存在,并且支持非常强大的路径表达式和操作。有关说明,请参见

@Inian-version 3.3.0Hanks,关于第一个选项,它如何知道将它放在数组的第三位?@RaynD:只需指定要插入的索引,即
命令[2]
而不是
+
,谢谢我尝试过,但它可以删除第三个条目“d”,你知道如何添加和不删除吗?@RaynD:恐怕你不能用
yq
v3或v4来添加“c”和“d”,有可能吗?但每一项都是新的