yq是一个轻量级的便携式命令行YAML处理器。该工具的目标是成为yaml文件处理方面的jq或sed。
创建
可以使用“new”命令创建Yaml文件。这与write命令的工作方式相同,但不需要传入已存在的Yaml文件。目前,不支持在单个yaml文件中创建多个文档。
1 | yq n <path> <new value> |
创建简单文件
1 | yq n b.c cat |
输出
1 | b: |
使用脚本创建文件
创建脚本遵循与更新脚本相同的格式。
给定一个脚本create_instructions.yaml:
1 | b.c: 3 |
然后
1 | yq n -s create_instructions.yaml |
输出
1 | b: |
还可以使用管道方式创建:
1 | cat create_instructions.yaml | yq n -s - |
带点号的Key
指定具有点号使用键查找指示符的键时。
1 | b: |
1 | yaml r sample.yaml 'b[foo.bar]' |
1 | yaml w sample.yaml 'b[foo.bar]' 9 |
可以将任何有效的yaml key指定为key查找的一部分。
请注意,路径是引号,以避免shell解释方括号。
带有破折号的键(和值)
如果键或值具有前导破折号,则yq将不知道您传递的是值而不是标志(并且您将收到“错误标志语法”错误)。
要解决这个问题,你需要告诉它通过在最后一个标志之后添加’ - ‘来停止处理标志,如下所示:
1 | yq n -t -- --key --value |
返回
1 | ` --key: --value |
删除
1 | yq d <yaml_file> <path_to_delete> |
写到标准输出
给出sample.yaml文件:
1 | b: |
然后
1 | yq d sample.yaml b.c |
输出
1 | b: |
从标准输入读取
1 | cat sample.yaml | yq d - b.c |
删除数组元素
给出sample.yaml文件:
1 | b: |
然后
1 | yq d sample.yaml 'b.c[1]' |
输出
1 | b: |
删除节点
给出sample.yaml文件:
1 | b: |
然后
1 | yq d -i sample.yaml b.c |
将更新sample.yaml文件,以便删除“c”节点。
通配符
给出sample.yaml文件:
1 |
|
然后
1 | yq d sample.yaml bob.*.cats |
输出
1 |
|
前缀匹配
给出sample.yaml文件:
1 |
|
然后
1 | yq d sample.yaml bob.item*.cats |
输出
1 |
|
数组匹配
给出sample.yaml文件:
1 |
|
然后
1 | yq d sample.yaml bob.[*].cats |
输出
1 |
|
多文档 - 删除单个文档
给出sample.yaml文件:
1 | something: else |
然后
1 | yq w -d1 sample.yaml field |
输出
1 | something: else |
多文档 - 删除所有文档
给出sample.yaml文件:
1 | something: else |
然后
1 | yq w -d'*' sample.yaml field |
输出
1 | something: else |
请注意,’*’在引号中以避免被shell解释。
带点号的Key
指定具有点号使用键查找指示符的键时。
1 | b: |
1 | yaml r sample.yaml 'b[foo.bar]' |
1 | yaml w sample.yaml 'b[foo.bar]' 9 |
可以将任何有效的yaml key指定为key查找的一部分。
请注意,路径是引号,以避免shell解释方括号。
带有破折号的键(和值)
如果键或值具有前导破折号,则yq将不知道您传递的是值而不是标志(并且您将收到“错误标志语法”错误)。
要解决这个问题,你需要告诉它通过在最后一个标志之后添加’ - ‘来停止处理标志,如下所示:
1 | yq n -t -- --key --value |
返回
1 | ` --key: --value |