yq是一个轻量级的便携式命令行YAML处理器。该工具的目标是成为yaml文件处理方面的jq或sed。
通配符
路径可以使用’prefix’命令作为前缀。完整的yaml内容将嵌套在新的前缀路径中。
1 | yq p <yaml_file> <path> |
写到标准输出
给出sample.yaml文件:
1 | a: simple |
然后
1 | yq p data1.yaml c |
输出
1 | c: |
任意深度
给定data1.yaml文件:
1 | a: |
然后
1 | yq p data1.yaml c.d |
输出
1 | c: |
更新文件
给定data1.yaml文件:
1 | a: simple |
然后
1 | yq p -i data1.yaml c |
将更新data1.yaml文件,以便路径’c’作为所有其他路径的前缀。
多文档 - 增加前缀到单个文档
给定data1.yaml文件:
1 | something: else |
然后
1 | yq p -d1 data1.yaml c |
输出
1 | something: else |
多文档 - 增加前缀到所有文档
给定data1.yaml文件:
1 | something: else |
然后
1 | yq p -d'*' data1.yaml c |
输出
1 | c: |
合并
可以使用’merge’命令合并Yaml文件。与第一个文件合并的每个附加文件将为任何尚未存在的key或没有值的key设置值。
1 | yq m <yaml_file> <path>... |
写到标准输出
给出data1.yaml文件:
1 | a: simple |
和data2.yaml文件:
1 | a: other |
然后
1 | yq m data1.yaml data2.yaml |
输出
1 | a: simple |
更新文件
给出data1.yaml文件:
1 | a: simple |
和data2.yaml文件:
1 | a: other |
然后
1 | yq m -i data1.yaml data2.yaml |
将更新data1.yaml文件,将’c’的值为’test:1’。
覆盖值
给出data1.yaml文件:
1 | a: simple |
和data2.yaml文件:
1 | a: other |
然后
1 | yq m -x data1.yaml data2.yaml |
输出
1 | a: other |
覆盖数组值
给出data1.yaml文件:
1 | a: simple |
和data3.yaml文件:
1 | b: [3, 4] |
然后
1 | yq m -x data1.yaml data3.yaml |
输出
1 | a: simple |
请注意,’b’不会导致数组中值的合并
追加数组值
给出data1.yaml文件:
1 | a: simple |
和data3.yaml文件:
1 | a: something |
然后
1 | yq m -a data1.yaml data3.yaml |
输出
1 | a: simple |
请注意,’b’数组已连接第二个数据文件中的值。另请注意,其他map键不会被覆盖(字段a)。
Append不能与overwrite一起使用,如果给出了两个标志,则忽略append。
多文档 - 合并单个文档
目前,yq仅对要合并的第一个文档提供多文档支持。剩余的yaml文件将选择其第一个文档。
给出data1.yaml文件:
1 | something: else |
和data3.yaml文件:
1 | b: dog |
然后
1 | yq m -x -d1 data1.yaml data3.yaml |
输出
1 | something: else |
多文档 - 合并所有文档
目前,yq仅对要合并的第一个文档提供多文档支持。剩余的yaml文件将选择其第一个文档。
给定data1.yaml文件:
1 | something: else |
和data3.yaml文件:
1 | b: dog |
然后
1 | yq m -x -d'*' data1.yaml data3.yaml |
输出
1 | b: dog |
转换
Yaml到Json
将输出转换为json,请使用–tojson(或-j)标志。这只能与read命令一起使用。
给出sample.yaml文件:
1 | b: |
然后
1 | yq r -j sample.yaml b.c |
输出
1 | {"b":{"c":2}} |
Json到Yaml
要读入json,只需传入一个json文件而不是yaml,它就可以工作了:)
例如给出一个json文件:
1 | {"a":"Easy! as one two three","b":{"c":2,"d":[3,4]}} |
然后
1 | yq r sample.json |
输出
1 | a: Easy! as one two three |