匹配分隔符后如何获取特定文本?

时间:2016-09-08 14:08:26

标签: bash

我在我的bash脚本中有这个:

CONFIG=$(docker inspect "${CONTAINER}" | jq '.[0].Config.Env')

CONFIG现在看起来像这样(作为字符串):

[ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "site_title=Example", "admin_email=test@test.com", "site_url=www.test.com" ]

我想要的是获得site_url,所以我尝试了:

cut -d "site_url=" -f 2 <<< "${CONFIG}"

但是使用cut我只能设置一个字符分隔符。

如何实现从www.test.com

获取"site_url=www.test.com"的目标

4 个答案:

答案 0 :(得分:1)

您可以再次使用jq吗?

SITE_URL=$(echo $CONFIG | jq -r '.[1]' | cut -f2- -d=)

答案 1 :(得分:1)

使用awk拆分函数将行拆分为两部分,然后提取所需内容。

awk '{split($0,a,"site_url="); gsub(/]|\"/,"", a[2]) ;print a[2]}'

答案 2 :(得分:1)

试试这个:

echo [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "site_title=Example", "admin_email=test@test.com", "site_url=www.test.com" ] | awk -F",|=|]" '{ print $8 } '

或者只是在你的情况下:

echo ${CONFIG} | awk -F",|=|]" '{ print $8 } '

答案 3 :(得分:0)

您可以将grep -ocut

一起使用
grep -o 'site_url=[^"]*' <<< "$CONFIG" | cut -d= -f2
www.test.com