如何使用bash从参数中的字符串列表中提取字符串

问题描述 投票:1回答:2

我从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

我怎样才能做到这一点?

bash sed
2个回答
1
投票

随着削减

cut -d '"' -f10

用grep

grep -o '[^"]*sydney7[^"]*'

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
© www.soinside.com 2019 - 2024. All rights reserved.