如何使用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中,如何通过匹配原始列表中的字符串模式从字符串列表中提取子列表

正则表达式从bash脚本中的字符串中提取第一个浮点数

如何从 Bash 中的路径字符串中删除文件后缀和路径部分?

如何从javascript中的字符串中提取参数(指定的模式字符串)

如何转义任意字符串以用作 Bash 中的命令行参数?

用bash脚本从plist中提取字符串,也许是sed?