Hallo Harald, hallo Norbert, hallo zusammen, Am Sonntag, 1. Juli 2018, 08:35:26 CEST schrieb Harald Stürmer:
for d in 20180701*xml ; do ts=$(grep -Po '<timestamp>.*</timestamp>' $d | sed -E -e 's/<.?timestamp>// g') value=$(grep -Po '<value>.*</value>' $d | sed -E -e 's/<.?value>//g') echo "$ts $value" done
Das sieht schonmal gut aus, startet aber zu viele Prozesse ;-) (Faustregel: sed kann auch greppen, daher brauchst Du kein extra grep) Wenn <timestamp> und <value> zusammen in einer Zeile stehen, kannst Du alles in einen sed-Befehl zusammenfassen: for d in 20180701*xml ; do sed -n 's/^.*<timestamp>\([0-9:-]*\)<\/timestamp>.*<value>\([0-9]*\)<\/value>.*$/\1 \2/p' < "$d" done Zum Testen: # (echo foo; echo '....................................<timestamp>YYYY-MM-DDTHH:MM:SS</timestamp>...........................<value>nnnnn</value>.................' ; echo bar ) | sed -n 's/^.*<timestamp>\([A-Z0-9:-]*\)<\/timestamp>.*<value>\([n0-9]*\)<\/value>.*$/\1 \2/p' YYYY-MM-DDTHH:MM:SS nnnnn (Damit der sed-Befehl mit den Dummy-Daten funktioniert, erlaubt die Regex auch "A-Z" bzw. "n". Für den Produktiv-Befehl in der Schleife habe ich die schon entfernt.) Falls <timestamp> und <value> in getrennten Zeilen stehen (können), ist die langweiligste Lösung, den sed-Befehl auf zwei Befehle aufzusplitten (einer für jeden Tag) - wobei "langweilig" was anderes ist als optimal ;-) Wenn Du noch mehr mit dem XML anstellen willst, wirst Du irgendwann an die Grenze regulärer Ausdrücke kommen - irgendwann schmerzt die "richtige" XML-Verarbeitung (z. B. mit XLST) weniger als RegEx-Magie ;-) Gruß Christian Boltz PS: Keine Zufallssignatur ;-) -- In most cases, XSLT is good enough. But I agree, for some parts you need Aspirin. ;-) [Thomas Schraitle in opensuse-doc] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org