首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用yq替换YAML文件中的数组

用yq替换YAML文件中的数组
EN

Stack Overflow用户
提问于 2021-04-07 17:42:29
回答 1查看 2.3K关注 0票数 1

在我的Mac上,我有yq,我想更改以下YAML文件:

代码语言:javascript
运行
复制
---
- type: replace
  path: /mypath1
  value:
  - "10.244.1.4"
- type: replace
  path: /mypath2
  value:
    - value1
- type: replace
  path: /mypath3
  value:
    - value1
 - type: remove
   path: /mypath4

现在我需要改变这个块:

代码语言:javascript
运行
复制
 - type: replace
   path: /mypath2
   value:
     - value1

在这方面:

代码语言:javascript
运行
复制
 - type: replace
   path: /mypath2
   value:
     - value2
     - value3

但我无法找到正确的yq w ...命令来执行此操作。我在网上搜索了很多例子,甚至在StackOverflow上,但是没有运气。最好的解决方案是,当"path==/mypath2“时,我可以使用另一个数组设置value字段。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-10 22:05:23

假设

在最后一个索引(第16行)前面缺少空间。要测试以下脚本,请使用下面的yaml文件:

代码语言:javascript
运行
复制
---
- type: replace
  path: /mypath1
  value:
    - "10.244.1.4"
- type: replace
  path: /mypath2
  value:
    - value1
- type: replace
  path: /mypath3
  value:
    - value1
- type: remove
  path: /mypath4
- type: remove
  path: test

根据您的示例(yq w...),我假设您使用的是yq3。

要做的第一件事是找到正确的查询来隔离要写入的数组。我使用path属性来隔离正确的索引,因为它似乎是唯一的标识符。

代码语言:javascript
运行
复制
$ yq r file.yml '(path==/mypath2).value'
- value1

既然我们有了正确的读取查询,就更容易理解写入查询。使用[+]运算符向现有数组追加新值。

代码语言:javascript
运行
复制
$ yq w file.yml '(path==/mypath2).value[+]' "value3"
- type: replace
  path: /mypath1
  value:
    - "10.244.1.4"
- type: replace
  path: /mypath2
  value:
    - value1
    - value3
- type: replace
  path: /mypath3
  value:
    - value1
- type: remove
  path: /mypath4
- type: remove
  path: test

您可以添加-i, --inplace选项来直接更新file.yml。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66991389

复制
相关文章

相似问题

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