Probleme mit Declare und sed

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
H3llGhost
Beiträge: 137
Registriert: 20.09.2009 11:33:47

Probleme mit Declare und sed

Beitrag von H3llGhost » 28.04.2010 11:01:40

Hallo zusammen,

ich habe folgenden Skript. Dieser funktioniert leider nicht so wie gewünscht. Die " " hinter data sind essentiell und ich habe auch keine Möglichkeit die Quelldateien zu verändern.

Code: Alles auswählen

for tag in condition temp_c humidity icon wind_condition
do
        declare $tag=$(sed -r -n "s/<$tag data\="(.*)"\/>/\1/p" wetter2.xml)
done
Habt ihr eine Idee?
Vielen Dank im Vorraus. :)

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Probleme mit Declare und sed

Beitrag von chrisbra » 29.04.2010 15:02:13

H3llGhost hat geschrieben:Hallo zusammen,

ich habe folgenden Skript. Dieser funktioniert leider nicht so wie gewünscht. Die " " hinter data sind essentiell und ich habe auch keine Möglichkeit die Quelldateien zu verändern.

Code: Alles auswählen

for tag in condition temp_c humidity icon wind_condition
do
        declare $tag=$(sed -r -n "s/<$tag data\="(.*)"\/>/\1/p" wetter2.xml)
done
Habt ihr eine Idee?
Vielen Dank im Vorraus. :)
Backslash escapen der Anführungszeichen:

Code: Alles auswählen

for tag in condition temp_c humidity icon wind_condition
do
        declare $tag=$(sed -r -n "s/<$tag data=\"(.*)\"\/>/\1/p" wetter2.xml)
done
Ich weiß ja nicht, wie deine wetter datei aufgebaut ist, aber wenn da mehrere $tags pro Zeile vorkommen können, dann kriegst du eventuell ungewünschte Resultate, weil .* greedy ist und bis zum letzten Anführungszeichen matchen würde. Besser wäre eine Negation, also

Code: Alles auswählen

...data=\"([^\"]*)\" ...
und Du solltest den Teil zwischen $(...) auch noch quoten, sonst bricht es, wenn Leerzeichen vorkommen.

Grüße,
Chrisitan
Meine Whishlist
:wq!

Benutzeravatar
detix
Beiträge: 1743
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Probleme mit Declare und sed

Beitrag von detix » 29.04.2010 21:20:03

Ein anderer Ansatz, falls es sich um so eine XML-Datei handelt (sieht zumindest so aus):

Code: Alles auswählen

wget -q http://www.google.com/ig/api?weather=Aachen&hl=de
wäre, die eine Zeile Text zuerst mal mit Zeilenumbrüchen zu versehen,
und anschl. alle '<>/' entfernen, vielleicht hilft das schon mal weiter.

Code: Alles auswählen

sed 's/>/>\n/g;s/[<>/]//g' api?weather=Aachen
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Antworten