Zsh 如何从输出aws cli中提取单个值--查询

Zsh 如何从输出aws cli中提取单个值--查询,zsh,aws-cli,Zsh,Aws Cli,我正在使用zsh运行此查询: output=$(aws sagemaker describe-training-job \ --training-job-name $name \ --query '{S3ModelArtifacts:ModelArtifacts.S3ModelArtifacts,TrainingImage:AlgorithmSpecification.TrainingImage,RoleArn:RoleArn}') 但就我的一生而言,我似乎无法单独提取出S3M

我正在使用
zsh
运行此查询:

output=$(aws sagemaker describe-training-job \
    --training-job-name $name \
    --query '{S3ModelArtifacts:ModelArtifacts.S3ModelArtifacts,TrainingImage:AlgorithmSpecification.TrainingImage,RoleArn:RoleArn}')
但就我的一生而言,我似乎无法单独提取出
S3ModelArtifacts
TrainingImage
RoleArn

它似乎既不是数组也不是关联数组?但当我执行
echo$output
时,它看起来像是json格式

最终我只想做一些类似于
var=${output[TrainingImage]}
的事情,但这只是给了我整个响应,而不仅仅是TrainingImage值


谢谢你的帮助

您可以使用命令行工具解析json输出,如下所示:

(19-11-27 10:25:38) <0> [~] printf %s "$output" | jq '.TrainingImage'
"123456789877.dkr.ecr.eu-west-1.amazonaws.com/kmeans:1"
(19-11-27 10:25:38)[~]printf%s“$output”| jq“。培训图像”
“123456789877.dkr.ecr.eu-west-1.amazonaws.com/kmeans:1”
或者,由于这是一个非常简单的查询,您可以使用:

(19-11-27 10:25:43)[~]printf%s“$output”| sed-n-e的/^.*培训图像://p'
“123456789877.dkr.ecr.eu-west-1.amazonaws.com/kmeans:1”,

这是sed命令的用法。

谢谢,我不想额外安装,所以我尝试使用您的sed示例,但它在结尾处留下了一个逗号。我尝试查看sed文档,但我一开始不了解sed,无法理解。请尝试此命令:
printf%s“$output”| sed-n-e的/^.*\TrainingImage:\(“*”\).*$/\1/p'
本质上它与表达式中的第一个(
\1
)正则表达式组匹配。如果需要不带引号的值,可以执行以下操作:
printf%s“$output”| sed-n-e's/^.*\TrainingImage:“\(.*\)”*$/\1/p'
(19-11-27 10:25:43) <0> [~] printf %s "$output" | sed -n -e 's/^.*TrainingImage"://p'
 "123456789877.dkr.ecr.eu-west-1.amazonaws.com/kmeans:1",