sed in xml datei

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von mondo, 03.07.2013.

  1. mondo

    mondo Grünschnabel

    Dabei seit:
    15.03.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,

    ich habe ein solches XML-Muster:
    Code:
     cat config.xml 
    <server target=instance1>
        <serrverpanel>
    	bla 
        </serverpanel>
        <serverinstance>
    	bla
        </serverinstance>
    	<service name=test1>
    		blubb
    	</service>
    	<service name=test2>
    		blubb
    	</service>
    	<service name=test3>
    		blubb
    	</service>
    </server>
    <server target=instance2>
        <serrverpanel>
    	bla 
        </serverpanel>
        <serverinstance>
    	bla
        </serverinstance>
    	<service name=test1>
    		blubb
    	</service>
    	<service name=test2>
    		blubb
    	</service>
    	<service name=test3>
    		blubb
    	</service>
    </server>
    <server target=instance3>
        <serrverpanel>
    	bla 
        </serverpanel>
        <serverinstance>
    	bla
        </serverinstance>
    	<service name=test1>
    		blubb
    	</service>
    	<service name=test2>
    		blubb
    	</service>
    	<service name=test3>
    		blubb
    	</service>
    </server>
    
    Ich möchte nun ein solches "serrvice-chapter" einfügen und zwar abhängig vom target name im serrver.
    Zum Beispiel soll in instance2 dies hier rein:
    Code:
    	<service name=test4>
    		ich bin neu
    	</service>
    
    Ob unten oder oben ist egal. Das ganze versuche ich unter Unix.

    Vielen Dank!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 fresh$free, 04.10.2013
    fresh$free

    fresh$free Jungspund

    Dabei seit:
    03.10.2013
    Beiträge:
    22
    Zustimmungen:
    0
    1. Das oben ist kein xml
    Das hier ist xml:
    Code:
    cat config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <serverpark>
    <server target='instance1'>
       <serverpanel>bla</serverpanel>
       <serverinstance>bla</serverinstance>
       <service name="test1">blubb</service>
       <service name="test2">blubb</service>
       <service name="test3">blubb</service>
    </server>
    <server target='instance2'>
       <serverpanel>bla</serverpanel>
       <serverinstance>bla</serverinstance>
       <service name="test1">blubb</service>
       <service name="test2">blubb</service>
       <service name="test3">blubb</service>
    </server>
    <server target='instance3'>
       <serverpanel>bla</serverpanel>
       <serverinstance>bla</serverinstance>
       <service name="test1">blubb</service>
       <service name="test2">blubb</service>
       <service name="test3">blubb</service>
    </server>
    </serverpark>
    

    2. Nimmt dafür einen xmlparser einer entspr. Lib/Klasse von diversen Scriptsprachen. Als Kommandozeilentool nimmt man z.B. xmlstarlet, das kann nicht nur abfragen wie die meisten Wrapper dieser Libs sondern auch Änderungen:
    Code:
    xmlstarlet ed -s "//server[@target='instance2']"  -t elem -n "service" -v "ich bin neu" \
                  -i "//server[@target='instance2']/node()[last()]" -t attr -n name -v "test4" ./config.xml
    
    das liefert dann:
    Code:
    ...
    <server target="instance2">
        <serverpanel>bla</serverpanel>
        <serverinstance>bla</serverinstance>
        <service name="test1">blubb</service>
        <service name="test2">blubb</service>
        <service name="test3">blubb</service>
        <service name="test4">ich bin neu</service>
      </server>
    ...
    
    Musste halt noch die Ausgabe umleiten in ein neues File....
     
  4. #3 Spröde, 04.10.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Code:
    sed -i '/<server target=instance2>/,/<\/server>/{s/<\/server>/\t<service name=test4>\n\t\tich bin neu\n\t<\/service>\n&/}' config.xml
     
  5. #4 fresh$free, 04.10.2013
    fresh$free

    fresh$free Jungspund

    Dabei seit:
    03.10.2013
    Beiträge:
    22
    Zustimmungen:
    0
    Wieso verschwindet hier immer meine Antwort?
     
  6. #5 Spröde, 05.10.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Ach du liebe Güte, da falle ich auf einen Leichenschänder rein, der den Thread nach oben gepusht hat. :O
     
Thema:

sed in xml datei

Die Seite wird geladen...

sed in xml datei - Ähnliche Themen

  1. Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

    Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...: Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...
  2. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  3. Dateiinhalte vergleichen - Neue Sätze dann ausgeben

    Dateiinhalte vergleichen - Neue Sätze dann ausgeben: Liebe Forumsmitglieder, ich benöte mal wieder Eure Hilfe: Ich möchte 2 Dateien vergleichen. Datei-1 hat z.B. 100 Datensätze mit mehreren Feldern...
  4. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...
  5. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...