Yq:检索对象键名称
Yq: retrieve object keys names
我有一个 YAML 文件(docker-compose 文件)看起来像这样:
networks:
foo:
some_opts: "covfefe"
bar:
some_opts: "such wow"
services:
apache:
image: 'apache:1.0.0'
restart: always
mysql:
image: 'mysql:1.0.0'
restart: always
php:
image: 'php'
restart: always
感谢 yq
,我想提取服务名称,相当于 jq
但对于 YAML,输出为:
"apache"
"mysql"
"php"
目前我可以这样实现:
$ cat docker-compose.yml | yq '.services' | yq 'keys[]'
"apache"
"mysql"
"php"
即使可行,双管道 yq
对我来说也很奇怪。我想我做错了。
问题:有什么方法可以用一条yq
命令实现吗?
我尝试了这个但没有成功,灵感来自 this question:
$ cat docker-compose.yml | yq '.services.keys[]'
jq: error: Cannot iterate over null
keys
是 jq
中的内置函数,当给定一个对象时,return 将它的键放入数组中。所以它实际上不是你的 yaml 的一部分(不是 属性),这意味着你不能做 services.keys
.
要获取密钥,您可以在使用 Python yq 时执行以下操作:
我们将在第一部分中获取 services
的对象,然后将其传递给 keys
,这将 return 基于给定对象的键列表
cat docker-compose.yml | yq '.services | keys'
或者像这样(没有猫和管道):
yq '.services | keys' docker-compose.yml
输出将是:
[
"apache",
"mysql",
"php"
]
去掉括号:
yq '.services | keys[]' docker-compose.yml
输出:
"apache"
"mysql"
"php"
有关详细信息,请查看 jq
中的 Builtin operators and functions。请注意,yq
是 jq
的包装器,因此 jq
的文档会有所帮助,因为 yq
的建议。
在Go yq你可以做
yq e '.services | keys'
因为您只想列出 docker-compose 文件中的服务,您可以使用 docker-compose 命令实现。
docker-compose config --services
不是问题的直接答案,因为它没有使用 yq 但也许有帮助 ;)
我有一个 YAML 文件(docker-compose 文件)看起来像这样:
networks:
foo:
some_opts: "covfefe"
bar:
some_opts: "such wow"
services:
apache:
image: 'apache:1.0.0'
restart: always
mysql:
image: 'mysql:1.0.0'
restart: always
php:
image: 'php'
restart: always
感谢 yq
,我想提取服务名称,相当于 jq
但对于 YAML,输出为:
"apache"
"mysql"
"php"
目前我可以这样实现:
$ cat docker-compose.yml | yq '.services' | yq 'keys[]'
"apache"
"mysql"
"php"
即使可行,双管道 yq
对我来说也很奇怪。我想我做错了。
问题:有什么方法可以用一条yq
命令实现吗?
我尝试了这个但没有成功,灵感来自 this question:
$ cat docker-compose.yml | yq '.services.keys[]'
jq: error: Cannot iterate over null
keys
是 jq
中的内置函数,当给定一个对象时,return 将它的键放入数组中。所以它实际上不是你的 yaml 的一部分(不是 属性),这意味着你不能做 services.keys
.
要获取密钥,您可以在使用 Python yq 时执行以下操作:
我们将在第一部分中获取 services
的对象,然后将其传递给 keys
,这将 return 基于给定对象的键列表
cat docker-compose.yml | yq '.services | keys'
或者像这样(没有猫和管道):
yq '.services | keys' docker-compose.yml
输出将是:
[
"apache",
"mysql",
"php"
]
去掉括号:
yq '.services | keys[]' docker-compose.yml
输出:
"apache"
"mysql"
"php"
有关详细信息,请查看 jq
中的 Builtin operators and functions。请注意,yq
是 jq
的包装器,因此 jq
的文档会有所帮助,因为 yq
的建议。
在Go yq你可以做
yq e '.services | keys'
因为您只想列出 docker-compose 文件中的服务,您可以使用 docker-compose 命令实现。
docker-compose config --services
不是问题的直接答案,因为它没有使用 yq 但也许有帮助 ;)