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

时间:2016-05-05 02:29:09

标签: json bash jq

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

X509.FindType.FindByThumbprint

输出如下:

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

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

j-9YWMBYN98LN7

当然上面的命令不起作用。我试过jq但没有运气。

ID=$CLUSTER.(ClusterId)

问题是我甚至不确定$ CLUSTER是什么类型的。如何在那里提取值ID=$(jq -r '.ClusterId' $CLUSTER) ?感谢

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

如果

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

给你

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

然后

echo "$ID"
j-9YWMBYN98LN7

应该这样做。

android:Theme.Light

答案 2 :(得分:0)

尝试以下方法:

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

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

我觉得你需要的东西更多,因为你可能正计划使用$ID的内容来获取某些东西,并且可能有更有效的方法来为你捕获这个值。也许如果您能够更多地解释您计划如何使用该值,我们可以提供更多可操作的答案。