Bash Wie die Inhalte zwischen zwei Zeichen rauscutten?

brenner

Commander
Registriert
Apr. 2002
Beiträge
3.030
Moin @all,

über wget lese ich eine xml Zeile in eine Variable ein
Code:
content=$(wget http://192.168.0.12/config/xmlapi/state.cgi?datapoint_id=6407 -q -O -)

String:
?xml version="1.0" encoding="ISO-8859-1" ?><state><datapoint ise_id='6407' value='7.500000'/></state>

Die Angaben hinter "value" (hier 7.500000) können Zahlen wie z.B. "22.50000", aber auch Zeichen wie "An" oder "Aus" enthalten. Der Wert steht immer hinter "value". Diese Werte hätte ich gerne alleinstehend ohne den ganzen anderen Rest.

Meine bisherigen sed, grep, cut Versuche waren ein Fehlschlag, irgendwie bin ich zu lange raus aus dem Thema :-(

Danke für Eure Hilfe!
 
Warum das eiserne Kreuz? Durch Aktuelles erstarkter Internet-Patriot, oder schon immer leicht rechts vor links gewesen? :rolleyes:
 
schnälli schrieb:
Warum das eiserne Kreuz? Durch Aktuelles erstarkter Internet-Patriot, oder schon immer leicht rechts vor links gewesen? :rolleyes:

Ist das deine Lösung zum Script Problem?
 
Das ist meine Pflicht gegen (möglichen) Rassismus!
 
@rg88:
Ich kapiere es nicht, gibt es noch eine andere Möglichkeit, möglichst ohne extras zu installieren bzw. ist es zu schwierig über die Bash?

@schnälli:
Du hast dich also verpflichten lassen? Nächstes mal lerne die PN Funktion zu nutzen wenn du private Probleme hast anstatt einen ganzen Thread zu zerstören. Aber am Besten beliest du dich vorher über die Bedeutung bevor du öffentlich dir fremde Leute anmachst die in diesem Forum schon seit über 16 Jahren und knapp 3.000 Beiträgen mit diesem Avatar unterwegs sind.
Ergänzung ()

@rg88:
Ich versuche es mal damit: http://www.schatenseite.de/2016/03/03/xmlstarlet-xml-werkzeugkasten-in-der-shell/
 
Naja, wenn es wirklich nur um so eine Kleinigkeit geht, einfach einen regulären Ausdruck wie <datapoint[^>]*?value='([^']+)' verwenden
 
echo "<xml-zeile>" | grep -Po "(?<=value=')[^']*"

Der Befehl gibt den Wert hinter value aus.

-P Perl-Regex-Syntax
-o gibt nur den Treffer aus, nicht die Zeile mit dem Treffer
(?<=) ist ein positiver Look-Behind (muss treffen ist aber nicht Teil des Treffers)
 

Ähnliche Themen

Antworten
9
Aufrufe
1.660
Zurück
Oben