2017-05-09 4 views
1

Ich bin neu zu Sed und Probleme beim Suchen und Ersetzen mehrzeiligen XML-Code zwischen den XML-Tags durch einige XML-Code. Hier ist die Probe für XML-CodeErsetzen Sie Text in XML-Multi-Line-Tags mit sed

<List> 
    <User> 
     <Id>1234</Id> 
     <Info> 
      <Id>11</Id> 
     </Info> 
    </User> 
</List> 

Ich mag den XML-Code zwischen Liste Tags ersetzen zu werden ..

<List> 
    <Replace> 
    <Id> 223 <Id> 
    </Replace> 
</List> 

I verwendet sed "s/\(<Id>\).*\(<\/Id\)/\19999\2/" input.xml > output.xml aber seine Arbeit für einzelne Linie, aber nicht für Multi-Line . Der Inhalt zwischen den List-Tags kann sich ändern und auch inline sein. Sie können also nicht auf bestimmte Muster antworten, sondern müssen sich nur auf Tags verlassen. Jede Hilfe oder Hinweise würden geschätzt werden?

+2

Verwenden Sie Regex nicht, um XML zu analysieren. Siehe diesen Beitrag http://stackoverflow.com/questions/9200462/simplet-way-to-do-basic-xml-parsing-from-unix-command-line – Lynch

+1

Verarbeitung von XML in Bash/Awk ist nicht die beste (dh die meisten robuster/sicherster Weg), kann jedoch schnelle und schmutzige Lösungen für persönliche/Debugging-Zwecke bieten. So könnten Sie diese Q/As betrachten: [SO: Erhalte einen Block aus einer XML-Datei mit Daten aus einer Quelldatei] (http://stackoverflow.com/questions/43642559/get-a-block-from-an- xml-Datei-using-data-from-a-source-Datei/43704602? s = 1 | 0.0000 # 43704602), [SO: Shell Scripting - Teilen von XML in mehrere Dateien] (http://StackOverflow.com/questions/ 42625786/shell-scripting-split-xml-in-multiple-files/42626222? S = 6 | 0.0000 # 42626222). – Scheff

Antwort

0

Wenn Sie wirklich Lynch Rat ignorieren soll, das wird es tun, aber Sie müssen es neu beschönigen:

sed -e ':a;N;$!ba' -e 's#<List.*</List>#<List>\n<Replace>\n<Id> 223 <Id>\n</Replace>\n</List>#' input.xml > output.xml 

es wahrscheinlich die GNU-Version von sed muss.