Verwendung von sed Befehl:
Exemple :
$ cat file.xml
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
$ cat file.xml | sed -ne '/<heading>/s#\s*<[^>]*>\s*##gp'
Reminder
Erläuterung:
cat file.xml | sed -ne '/<pattern_to_find>/s#\s*<[^>]*>\s*##gp'
n
- Drucken aller Zeilen unterdrücken
e
- Skript
/<pattern_to_find>/
- findet Zeilen, die ein bestimmtes Muster enthalten, was z.B. sein könnte. <heading>
der nächste Teil ist die Substitution s///p
die alles außer dem gewünschten Wert entfernt, wobei /
wird ersetzt durch #
für eine bessere Lesbarkeit:
s#\s*<[^>]*>\s*##gp
\s*
- enthält Leerzeichen, falls vorhanden (auch am Ende)
<[^>]*>
steht für <xml_tag>
als nicht-gierige Regex-Alternative verursachen <.*?>
funktioniert nicht für sed
g - ersetzt alles, z.B. das Schließen von xml </xml_tag>
Tag
0 Stimmen
Wenn Ihre XML-Datei dies enthalten würde: <?xml version="1.0" encoding="utf-8"?> <job xmlns=" sample.com/">Tom & Jerry</job> würden Sie wollen, dass das Ergebnis XML-Escaping in Ruhe gelassen wird: Tom & Jerry oder möchten Sie, dass das Escaping rückgängig gemacht wird, wie es ein XML-Parser tun würde: Tom & Jerry Wenn letzteres der Fall ist, weiß ich leider nicht, wie man das mit Unix-Textprogrammen macht.
0 Stimmen
@Paul
s/&/\&/g
, auch für"
usw., natürlich wird es nicht für benutzerdefinierte Entitäten usw. verallgemeinert.0 Stimmen
https://stackoverflow.com/a/17333829/3291390