我有以下yq命令
yq e '.values.tags="{tag1:'value1', tag2:'value2'}"' -i my file.yaml 我需要引用这些值。当我使用yq运行查询时,值两边的引号被删除。我尝试了几种方法来删除它们,但到目前为止都不起作用。
在我的yaml文件中,它是这样结束的:
values:
tags: "{tag1:value1, tag2:value2}"虽然我希望是这样的:
values:
tags: "{tag1:'value1', tag2:'value2'}"有人知道怎么做吗?谢谢
发布于 2021-04-21 16:46:15
单引号由您的shell解释。Shell连接带引号和不带引号的邻接值。从shell的角度来看,您给出了以下相邻值:
.values.tags="{tag1:
value1
, tag2:
value2
}"这些是连接在一起的,结果就是你所看到的。
有几种可能性可以弥补这一点。我建议在shell级别使用双引号表示值:
yq e ".values.tags=\"{tag1:'value1', tag2:'value2'}\"" -i myfile.yaml这样,您只需要转义字符串中的双引号。(这在csh/tcsh中不起作用。)
发布于 2021-11-29 10:56:27
您可以使用yq中的from_json和to_json运算符对其进行全部就地编辑:
yq e '.values.tags |= (from_yaml | .tag1 = "cat" | to_json(0))' file.yaml有关详细信息,请参阅https://mikefarah.gitbook.io/yq/operators/encode-decode。
披露:我写了yq
发布于 2021-08-04 09:19:35
谢谢你@flyx。您提到的解决方案帮助我解决了问题。我需要将yaml转换为json,修改后再将其转换回yaml。
我是这样做的:
cat abc.yaml | sed -e 's,\",\\",g' | yq eval -j | jq . > bca.json
jq -e '(.spec.template.spec.volumes[1]) = "" ' bca.json | sponge bca.json
yq eval -P bca.json > bca.yaml
sed -i -e 's,\\",\",g' bca.yamlhttps://stackoverflow.com/questions/67191347
复制相似问题