SED Problem mit XML

L

LUK

Grünschnabel
Hallo,
bitte um Hilfe - komme mit GNU SED einfach nicht weiter ... muss aber gehen.
Mein Problem:
Möchte den XML-Tagnamen ändern, (nur das Endtag), das Anfangstag ist OK,
leider steht das Endtag nicht immer in der gleichen Zeile wie das Anfangstag
und die Abschnitte (<occ>) wiederholen sich und beinhalten die gleichen Anfagstagnamen.
Das ist mein Problem:

XML-Abschnitt:
<table>
<occ>
<ufield_ulabel>ACCEPT</dat>
<ufield_base>BASE</dat>
</occ>

<occ>
<ufield_ulabel>ACCEPT .........
</dat>
<ufield_base>BASE ....
</dat>
</occ>

<occ>
<ufield_ulabel>ACCEPT .........
..................
..... viele Zeilen .,..
.....
</dat>
<ufield_base>BASE
......
</dat>
</occ>
</table>

Gewünschte Änderung </dat> => wie der Anfangstag:
-----------------------------------------
<table>
<occ>
<ufield_ulabel>ACCEPT</ufield_ulabel>
<ufield_base>BASE</ufield_base>
</occ>

<occ>
<ufield_ulabel>ACCEPT .........
</ufield_ulabel>
<ufield_base>BASE ....
</ufield_base>
</occ>

<occ>
<ufield_ulabel>ACCEPT .........
..................
</ufield_ulabel>
<ufield_base>BASE ....
..........
</ufield_base>
</occ>
</table>

Folgende SED- Anweisungen verwende ich momentan (die auch funktionieren),
leider nur wenn ich 1x <occ> .. </occ> in der Datei (ufield.xml) habe.

sed -n "1h;1!H;${;g;/<ufield_ulabel>.*<\/dat>/s/<\/dat>/<\/ufield_ulabel>/;p;}" ufield.xml 1> temp.xml

sed -n "1h;1!H;${;g;/<ufield_base>.*<\/dat>/s/<\/dat>/<\/ufield_base>/;p;}" temp.xml 1> ufield.xml

Info: das /g vor dem ";p" bring hier nicht das gewünschte Ergebnis.
Den Bereich <occ> .. </occ> heraus zu schneiden und es daruaf anzuwenden,
wäre möglich, aber auch umständlich.

Bitte um Vorschläge, nur für SED - Danke!
 
Zuletzt bearbeitet:
Hi,
glaube die Lösung gefunden zu haben!

sed -e "/<ufield_ulabel>.*/{:loop;N;/<\/dat>/!bloop;/<\/dat>/s/<\/dat>/<\/ufield_ulabel>/;}" ufield.xml 1> temp.xml
sed -e "/<ufield_base>.*/{:loop;N;/<\/dat>/!bloop;/<\/dat>/s/<\/dat>/<\/ufield_base>/;}" temp.xml 1> ufield.xml

Gruß!
 

Ähnliche Themen

sed - Bitte um Unterstützung

ip6tables Problem

Zeilen kopieren mit SED

Samba 4.1.11 Domänen anbindung funktioniert nicht !!!

rrdtool Problem

Zurück
Oben