我有以下 yaml 文件:
some:
fields: ...
# ...
images:
image_1:
name: "some-name"
value: 1111
# ...
some:
other-fields: ...
我想使用与 image_1
相同的模板添加生成的对象:
image_<no>:
name: "<name>"
value: <value>
我已经找到了如何使用 yq
构建对象,但是我在将其添加到现有字段 (images
) 的最后一个元素下时遇到了问题。我用来构建对象的简化脚本。
yq eval '{"image_no": {"name": "my_name", value: 1111}' myfile.yml
答案 0 :(得分:0)
使用 yq 可以轻松解决您的任务。
bash 脚本显示了两个略有不同的版本:
imageNo
name
和 value
被传递给 yq
。imageNo
是在脚本中根据当前图像数量计算的。#!/bin/bash
FILE='
some:
fields: "value"
images:
image_1:
name: "some-name"
value: 1111
image_2:
name: "some-name-2"
value: 1112
image_3:
name: "some-name-3"
value: 1113
some:
other-fields: "other-value"
'
echo adding new image to yaml - version 1
yq -y --argjson imageNo 4 --arg name "my_name" --argjson value 1114 '
.images += {
"image_\($imageNo)":
{
name: $name,
value: $value
}
}' <<< "$FILE"
echo adding new image to yaml - version 2
yq -y --arg name "my_name" --argjson value 1114 '
(.images | keys | length + 1) as $imageNo
| .images += {
"image_\($imageNo)":
{
name: $name,
value: $value
}
}' <<< "$FILE"
output
版本 1 和版本 2some:
other-fields: other-value
images:
image_1:
name: some-name
value: 1111
image_2:
name: some-name-2
value: 1112
image_3:
name: some-name-3
value: 1113
image_4:
name: my_name
value: 1114