Linux bash script - substring aus string ermitteln
Hallo,
ich bin nun schon seit geraumer Zeit in den Suchmaschinen diverser Foren unterwegs und habe auch schon viele Tipps und Antworten gefunden zu ähnlichen Problemen; leider konnte ich aber bislang dennoch mit keiner der gefunden Antworten mein Problem lösen...
Ich habe in einer Variablen einen String der folgenden Art:
Nun benötige ich den o.a. Pfad in einer anderen Variablen zur weiteren Verarbeitung.
Ausdrücke wie
habe ich schon in unterschiedlichen Konfigurationen verwendet; leider ohne Erfolg.
Ach ja...dann müsste ich im nächsten Schritt auch noch die Leerzeichen im Pfad durch %20 ersetzen; vielleicht könnte mir dazu auch schonmal Jemand einen Tipp geben?!?
Vorab danke für Eure Antworten
Gruß
Patrick
ich bin nun schon seit geraumer Zeit in den Suchmaschinen diverser Foren unterwegs und habe auch schon viele Tipps und Antworten gefunden zu ähnlichen Problemen; leider konnte ich aber bislang dennoch mit keiner der gefunden Antworten mein Problem lösen...
Ich habe in einer Variablen einen String der folgenden Art:
VAR1=20121213095147009010153---Upload package 1_Workflow-n-Audit-purge-1.7.1.zip---{"success":true,"msg":"Package uploaded","path":"/etc/packages/daycare/Workflow n Audit purge-1.7.1.zip"}
Nun benötige ich den o.a. Pfad in einer anderen Variablen zur weiteren Verarbeitung.
Ausdrücke wie
VAR2=`expr match "$VAR1" '\(./"\)'`
habe ich schon in unterschiedlichen Konfigurationen verwendet; leider ohne Erfolg.
Ach ja...dann müsste ich im nächsten Schritt auch noch die Leerzeichen im Pfad durch %20 ersetzen; vielleicht könnte mir dazu auch schonmal Jemand einen Tipp geben?!?
Vorab danke für Eure Antworten
Gruß
Patrick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195818
Url: https://administrator.de/contentid/195818
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
3 Kommentare
Neuester Kommentar
Moin,
Sofern da immer "path": dasteht und der String mit } endet, würden folgendes funktionieren:
Variante 1
Variante 2
Es gibt noch unzählige andere Methoden, aber das sind die ersten Schnellschüsse, die mir so gerade aus den Fingern gefallen sind.
nachtrag: Für den zweiten Schritt schaust Du Dir die Ausgabe von "man sed" an.
lks
Sofern da immer "path": dasteht und der String mit } endet, würden folgendes funktionieren:
Variante 1
VAR2=`echo $VAR1 | sed -e "s:.*path\".\"::g" | sed -e "s:\"}$::g"`
Variante 2
VAR2=`echo $VAR1 | gawk -F "path\":\"" ' { print $2 } ' | gawk -F "\"}" ' { print $1 } ' `
Es gibt noch unzählige andere Methoden, aber das sind die ersten Schnellschüsse, die mir so gerade aus den Fingern gefallen sind.
nachtrag: Für den zweiten Schritt schaust Du Dir die Ausgabe von "man sed" an.
lks
Eine erste Idee, mag aber deutlich schöner / schneller gehen:
echo $VAR1 | awk -v a="$VAR1" '{print substr(a,(index(a,"path")+7))}' | sed -e 's/"/ /g' -e 's/}/ /g' -e 's/\ /%20/g'
PS: Das Forum zerlegt mir den String irgendwie - bei den ersten beiden "sed -e" müssen die Leerzeichen zwischen den beiden Slash natürlich raus.
echo $VAR1 | awk -v a="$VAR1" '{print substr(a,(index(a,"path")+7))}' | sed -e 's/"/ /g' -e 's/}/ /g' -e 's/\ /%20/g'
PS: Das Forum zerlegt mir den String irgendwie - bei den ersten beiden "sed -e" müssen die Leerzeichen zwischen den beiden Slash natürlich raus.