如何使用bash从参数中的字符串列表中提取字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用bash从参数中的字符串列表中提取字符串相关的知识,希望对你有一定的参考价值。
我从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
我怎样才能做到这一点?
答案
随着削减
cut -d '"' -f10
用grep
grep -o '[^"]*sydney7[^"]*'
另一答案
由于命令的输出是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
以上是关于如何使用bash从参数中的字符串列表中提取字符串的主要内容,如果未能解决你的问题,请参考以下文章
在python中,如何通过匹配原始列表中的字符串模式从字符串列表中提取子列表