在 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'`
我在 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'`