在 bash 中提取类似 json 的变量的值

Extract value of json-like variable in bash

我在 bash 中有一个变量,它是 Amazon EMR 创建命令的输出;

CLUSTER=$(aws emr create-cluster ...)
echo $CLUSTER

输出是这样的:

{ "ClusterId": "j-9YWMBYN98LN7" }

我需要做的是将值 j-9YWMBYN98LN7 提取到一个新变量中,例如:

ID=$CLUSTER.(ClusterId)

当然上面的命令是行不通的。我试过 jq 但没有成功。

ID=$(jq -r '.ClusterId' $CLUSTER)

问题是我什至不确定 $CLUSTER 是什么类型。我如何在那里提取值 j-9YWMBYN98LN7 ?谢谢

尝试以下操作:

ID=$(echo "${CLUSTER}" | sed 's/{ "ClusterId": "//' | sed 's/" }//')

这会将 j-9YWMBYN98LN7 或最后一组引号之间的任何内容隔离到变量 $ID.

我觉得您可能需要更多的东西,因为您可能计划将 $ID 的内容用于某些事情,并且可能有更有效的方法来为您获取该价值。也许如果您能多解释一下您计划如何使用该值,我们可以提供更具可操作性的答案。

如果

echo $CLUSTER

给你

{ "ClusterId": "j-9YWMBYN98LN7" }

然后

ID=$(awk  'BEGIN{FS="\""}{print }' <<< "${CLUSTER}")

应该这样做。

echo "$ID"
j-9YWMBYN98LN7

如果你想使用jq,你可以这样做

 ID=`echo ${CLUSTER} | jq -r '.ClusterId'`