在我的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“时,我可以使用另一个数组设置value字段。有什么建议吗?
发布于 2021-04-10 22:05:23
假设
在最后一个索引(第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。
https://stackoverflow.com/questions/66991389
复制相似问题