gpt4 book ai didi

awk - bash/grep : getting multiple matching elements from a json

转载 作者:行者123 更新时间:2023-12-04 09:25:44 24 4
gpt4 key购买 nike

在我的 BitBucket+Bamboo 设置中,我试图获取有权访问特定存储库的人员的电子邮件地址列表。这是 BitBucket API 的输出:

{
"size": 3,
"limit": 25,
"isLastPage": true,
"values": [
{
"user": {
"name": "name1",
"emailAddress": "name1.lastname1@domain.com",
"id": 1,
"displayName": "Name1 Lastname1",
"active": true,
"slug": "name1",
"type": "NORMAL",
"links": {
"self": [
{
"href": "https://bitbucket.com/stash/users/name1"
}
]
}
},
"permission": "REPO_WRITE"
},
{
"user": {
"name": "name2",
"emailAddress": "name2.lastname2@domain.com",
"id": 2,
"displayName": "Name2 Lastname2",
"active": true,
"slug": "name2",
"type": "NORMAL",
"links": {
"self": [
{
"href": "https://bitbucket.com/stash/users/name2"
}
]
}
},
"permission": "REPO_WRITE"
},
{
"user": {
"name": "name3",
"emailAddress": "name3.lastname3@domain.com",
"id": 3,
"displayName": "Name3 Lastname3",
"active": true,
"slug": "name3",
"type": "NORMAL",
"links": {
"self": [
{
"href": "https://bitbucket.com/stash/users/name3"
}
]
}
},
"permission": "REPO_WRITE"
}
],
"start": 0
}
有没有一种简单的方法可以将所有 3 个电子邮件地址放入一个数组或一个 bash 脚本中的逗号分隔变量中?我尝试使用 grep 并以某种方式拆分 API 输出(例如通过“权限”),但到目前为止还没有运气。请注意,我可能被迫使用 grep、sed 或 awk 等标准工具,这意味着我可能无法使用 jq(在 bash 中处理 json)之类的工具,因为我无法真正调整可用的构建代理。
任何帮助将非常感激!

最佳答案

考虑使用 JQ(或其他 JSON 查询工具)。它将处理任何有效的 Json,即使是没有以特定方式打印或格式化的 Json。可以与 readarray 组合以在 bash 中构建数组。

readarray -t emails <<< "$(jq -r '.values[].user.emailAddress' < file)"
将产生一个数组“电子邮件”
declare -p emails
declare -a emails=([0]=$'name1.lastname1@domain.com' [1]=$'name2.lastname2@domain.com' [2]=$'name3.lastname3@domain.com')
注释 2020-07-22:添加了“-t”以从结果数组中去除尾随的新行

关于awk - bash/grep : getting multiple matching elements from a json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63020289/

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