2016-09-08 3 views
0

Ich habe dies in meinem Bash-Skript:Wie erhält man bestimmten Text nach passendem Trennzeichen?

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

CONFIG sieht nun so etwas wie dies (als String):

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

Was ich will, ist die site_url zu bekommen, so habe ich versucht:

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

Aber mit kann ich nur ein Ein-Zeichen-Trennzeichen setzen.

Wie kann ich mein Ziel erreichen www.test.com bekommen von "site_url=www.test.com"

+0

versuchen awk anstelle von Schnitt. – dood

Antwort

1

Können Sie jq einfach wieder verwenden?

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

können Sie verwenden grep -o mit cut:

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

verwendet awk Split-Funktion die Zeile in zwei Teile zu spalten und dann extrahiert, was benötigt wird.

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

denke, Sie können es einfacher mit awk tun, ohne eingebaute Funktionen zu verwenden. – dood

1

Try this:

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

Oder in Ihrem Fall einfach:

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