assimilator
Goto Top

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:

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 face-smile

Gruß
Patrick

Content-Key: 195818

Url: https://administrator.de/contentid/195818

Ausgedruckt am: 29.03.2024 um 04:03 Uhr

Mitglied: Lochkartenstanzer
Lochkartenstanzer 13.12.2012 aktualisiert um 12:48:29 Uhr
Goto Top
Moin,

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
Mitglied: nevermind2012
nevermind2012 13.12.2012 aktualisiert um 12:56:23 Uhr
Goto Top
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.
Mitglied: Assimilator
Assimilator 13.12.2012 um 14:48:54 Uhr
Goto Top
Hi,

vielen Dank für Eure Tipps!

Ich hab's mit dem Code von nevermind2012 versucht, musste noch eine Kleinigkeit anpassen und jetzt läuft's face-smile

THX
Patrick