1

在我的 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”时,我可以使用另一个数组设置值字段。有什么建议吗?

4

1 回答 1

1

假设

最后一个索引(第 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 的选项。

于 2021-04-10T22:05:23.670 回答