gpt4 book ai didi

shell - Yq:检索对象键名称

转载 作者:行者123 更新时间:2023-12-02 07:18:07 26 4
gpt4 key购买 nike

我有一个 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

最佳答案

keysjq 中的内置函数当给定一个对象时,在数组中返回它的键。所以它实际上不是你的 yaml(不是属性)的一部分,这意味着你不能做 services.keys .
要获取 key ,您可以在使用 Python yq 时执行以下操作:
我们将得到services的对象在第一部分然后我们将它传递给 keys它将返回基于给定对象的键列表

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"

更多详情可以查看 Builtin operators and functionsjq .请注意 yqjq 的包装器所以 jq 的文档在 yq 的帮助下会有所帮助推荐。

Go yq你可以做
yq e '.services | keys'

关于shell - Yq:检索对象键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55280071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com