我从AWS获得了一个引用字符串列表, 我想把其中一个分成参数。
我使用的命令是:
allelb=$(aws elb describe-load-balancers --query 'LoadBalancerDescriptions[].LoadBalancerName') && echo $allelb
这是我得到的输出:
[ "elb-app-mprest-dev", "elb-core-mprest-dev", "api-vector-k8s-local-0j8ccl", "a2e6a899d111011e897b0067693cf815", "api-clusters-sydney7-mpre-rqae1h" ]
我想要做的是,只获取带有' sydney7'这个词的字符串。在参数内。所以我将在这个内容中有一个新参数:
ELB = API-集群 - sydney7-MPRE-rqae1h
这是我到目前为止的事情:
allelb=$(aws elb describe-load-balancers --query 'LoadBalancerDescriptions[].LoadBalancerName' | tr -d '"' | tr -d ',' | tr -d ']' | tr -d '[') && echo $allelb | grep -o sydney7
但我得到的输出不够好 -
sydney7
我怎样才能做到这一点?
答案 0 :(得分:3)
由于命令的输出是JSON数组,因此您应该使用一个程序来解析和过滤JSON,例如jq
:
$ jq '.[] | match(".*sydney.*").string' <<< "$allelb"
"api-clusters-sydney7-mpre-rqae1h"
如果您想要它是原始的,请使用-r
标志:
$ jq -r '.[] | match(".*sydney.*").string' <<< "$allelb"
api-clusters-sydney7-mpre-rqae1h
答案 1 :(得分:1)
切割
cut -d '"' -f10
使用grep
grep -o '[^"]*sydney7[^"]*'