首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保留包含yq的引号

保留包含yq的引号
EN

Stack Overflow用户
提问于 2021-04-21 15:41:13
回答 3查看 204关注 0票数 1

我有以下yq命令

代码语言:javascript
复制
yq e '.values.tags="{tag1:'value1', tag2:'value2'}"' -i my file.yaml 

我需要引用这些值。当我使用yq运行查询时,值两边的引号被删除。我尝试了几种方法来删除它们,但到目前为止都不起作用。

在我的yaml文件中,它是这样结束的:

代码语言:javascript
复制
values:
    tags: "{tag1:value1, tag2:value2}"

虽然我希望是这样的:

代码语言:javascript
复制
values:
    tags: "{tag1:'value1', tag2:'value2'}"

有人知道怎么做吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-21 16:46:15

单引号由您的shell解释。Shell连接带引号和不带引号的邻接值。从shell的角度来看,您给出了以下相邻值:

代码语言:javascript
复制
.values.tags="{tag1:
value1
, tag2:
value2
}"

这些是连接在一起的,结果就是你所看到的。

有几种可能性可以弥补这一点。我建议在shell级别使用双引号表示值:

代码语言:javascript
复制
yq e ".values.tags=\"{tag1:'value1', tag2:'value2'}\"" -i myfile.yaml

这样,您只需要转义字符串中的双引号。(这在csh/tcsh中不起作用。)

票数 2
EN

Stack Overflow用户

发布于 2021-11-29 10:56:27

您可以使用yq中的from_json和to_json运算符对其进行全部就地编辑:

代码语言:javascript
复制
yq e '.values.tags |= (from_yaml | .tag1 = "cat" | to_json(0))' file.yaml

有关详细信息,请参阅https://mikefarah.gitbook.io/yq/operators/encode-decode

披露:我写了yq

票数 1
EN

Stack Overflow用户

发布于 2021-08-04 09:19:35

谢谢你@flyx。您提到的解决方案帮助我解决了问题。我需要将yaml转换为json,修改后再将其转换回yaml。

我是这样做的:

代码语言:javascript
复制
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.yaml
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67191347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档