根据key向yaml文件添加多行
Adding multiple lines to yaml file based on key
我有 sample.yaml 文件,如下所示:
a:
b:
- "x"
- "y"
- "z"
我还有另一个名为 toadd.yaml 的文件,其中包含以下内容
- "first to add"
- "second to add"
我想修改 sample.yaml 文件,使其看起来像:
a:
b:
- "x
- "y"
- "z"
- "first to add"
- "second to add"
还有,我不要多余的命名!所以如果 toadd.yaml 中已经有“x”,我不想在 sample.yaml/a.b[ 中将它添加两次=32=]
请注意,我尝试了以下方法:
while read line; do
yq '.a.b += ['$line']' sample.yaml
done <toadd.yaml
然后我跌倒了:
Error: Bad expression, could not find matching `]`
如果文件比较小,可以直接把第二个文件加载到第一个文件上。参见 Merging two files together
yq '.a.b += load("toadd.yaml")' sample.yaml
在 mikefarah/yq 版本 4.25.1
上测试
为了解决冗余需求,在重新组成数组之前做一个unique
操作。
yq 'load("toadd.yaml") as $data | .a.b |= ( . + $data | unique )' sample.yaml
可以进一步简化为
yq '.a.b |= ( . + load("toadd.yaml") | unique )' sample.yaml
我有 sample.yaml 文件,如下所示:
a:
b:
- "x"
- "y"
- "z"
我还有另一个名为 toadd.yaml 的文件,其中包含以下内容
- "first to add"
- "second to add"
我想修改 sample.yaml 文件,使其看起来像:
a:
b:
- "x
- "y"
- "z"
- "first to add"
- "second to add"
还有,我不要多余的命名!所以如果 toadd.yaml 中已经有“x”,我不想在 sample.yaml/a.b[ 中将它添加两次=32=]
请注意,我尝试了以下方法:
while read line; do
yq '.a.b += ['$line']' sample.yaml
done <toadd.yaml
然后我跌倒了:
Error: Bad expression, could not find matching `]`
如果文件比较小,可以直接把第二个文件加载到第一个文件上。参见 Merging two files together
yq '.a.b += load("toadd.yaml")' sample.yaml
在 mikefarah/yq 版本 4.25.1
上测试为了解决冗余需求,在重新组成数组之前做一个unique
操作。
yq 'load("toadd.yaml") as $data | .a.b |= ( . + $data | unique )' sample.yaml
可以进一步简化为
yq '.a.b |= ( . + load("toadd.yaml") | unique )' sample.yaml