bash - 提取jq中的路径名组件

标签 bash jq

我有以下 bash 命令

something something ... |
xargs -L 1 az aks list --subscription |
jq -r '.[] | "az aks get-credentials --name \(.name) --resource-group \(.resourceGroup) --subscription=\(.id)"'

除了最后一个参数 \(.id) 之外,这都是有效的是一个字符串,我需要使用嵌入在最终输出字符串中的以下命令输出进行子串

awk -F "/" '{print $3}' <<< "/subscriptions/I-need-Selecting/resourcegroups/blahblah/blahblah"

我似乎无法在输出的命令中执行此命令 - 我无法转义 "'awk有效。

aks list --subscriptions 的输出命令看起来像

[{"name": "foo", "resourceGroup": "bar", "subscription": "/subscriptions/I-need-Selecting/resourcegroups/blahblah/blahblah"},
... ]

有人可以帮忙吗?

最佳答案

如果你问,给定

bash$ echo '[{"name": "tarzan", "resourceGroup": "froup", "id": "/subscriptions/I-need-Selecting/resourcegroups/blahblah/blahblah" }]' |
> jq -r '.[] | "az aks get-credentials --name \(.name) --resource-group \(.resourceGroup) --subscription=\(.id)"'
az aks get-credentials --name tarzan --resource-group froup --subscription=/subscriptions/I-need-Selecting/resourcegroups/blahblah/blahblah

...如何将“订阅”参数减少为一个子字符串,请尝试

jq '.[] |  "az aks get-credentials --name \(.name) --resource-group \(.resourceGroup) --subscription=\(.id | split("/")[3])"'

在这里运行 Awk 并非不可能,但鉴于 jq 具有大致相同的功能和内置 JSON 解析器,因此在 jq 中本地执行此操作似乎更好>.

关于bash - 提取jq中的路径名组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67367991/

相关文章:

linux - 在 Linux 上高效编辑超大文件顶部附近的内容

aws-cli - 如何将 jq 与 'select(startswith("$variable"))' 一起使用?

json - jq - 根据其中一个值查找 JSON 对象并从中获取另一个值

json - JQ if then 语句范围

Bash:最后(尝试,除外)异常

linux - 如何在 linux 中通过 pid 杀死一个进程

linux - 迭代等于文件名 bash

Bash 选择没有标签的菜单格式

path - jq:在未知输入结构深处按名称搜索属性并打印路径

json - 使用 jq : Only select parents with a certain child key