问题描述
在我的 Mac 上,我有 yq
并且我想更改以下 YAML 文件:
---
- 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: replace
path: /mypath2
value:
- value1
这样:
- type: replace
path: /mypath2
value:
- value2
- value3
但我找不到正确的 yq w ...
命令来执行此操作。我在网上搜索了很多例子,甚至是在 StackOverflow 上,但没有运气。
最好的解决方案是,当“path==/mypath2”我可以用另一个数组设置值字段。
有什么建议吗?
解决方法
假设
最后一个索引(第 16 行)前面缺少空格。要测试以下脚本,请使用以下 yaml 文件:
---
- 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
属性来隔离正确的索引,因为它似乎是一个唯一标识符。
$ yq r file.yml '(path==/mypath2).value'
- value1
现在我们有了正确的读取查询,更容易找出写入查询。使用 [+]
运算符将新值附加到现有数组。
$ 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。