有一个文件sample.yaml
---
action: "want-to-update"
foo: |-
{
"a" : "actual A",
"b" : "actual B",
"c" : "actual C"
}
---
action: "dont-want-to-update"
foo: |-
.
.
.
需要将a
字段中的值从actual a
更新为updated a
尝试使用yq
和jq
更新
yq 'select(.action == "want-to-update").foo' sample.yaml | jq '.a = "updated a" | tostring' | xargs -0 -n1 -I{} yq 'select(.action == "want-to-update").foo = {}' -i sample.yaml
输出如下:
---
action: "want-to-update"
foo: |-
{"a":"updated a","b":"actual B","c":"actual C"}
---
.
.
但我想要上面更漂亮的版本:
---
action: "want-to-update"
foo: |-
{
"a" : "updated A",
"b" : "actual B",
"c" : "actual C"
}
---
2条答案
按热度按时间nkoocmlb1#
使用
fromjson
和tojson
,您可以动态地对JSON进行解码和编码,因此所有这些操作只需调用yq即可完成(无需jq和命令替换):sy5wg1nm2#
基本上,删除
tostring
第一个