Sie SED nicht für das Parsen von XML verwenden, da es nicht ausgelegt ist, XML-Syntax zu handhaben, und in SED einen XML-Parser zu schreiben ist eine schwierige Aufgabe. Außerdem gibt es viele nützliche Tools genau für diesen Zweck.
Betrachten Sie diese XML:
<root>
<item>
<errorCode>4000</errorCode>
<severity>2</severity>
<modelDescription>Some error</modelDescription>
</item>
<item>
<errorCode>4544</errorCode>
<severity>4</severity>
<modelDescription>Licensing: Invalid license</modelDescription>
</item>
</root>
Sie können ganz einfach ändern Sie den severity
Wert mit xmlstarlet
:
xmlstarlet ed -u '//item[severity = 4
and modelDescription = "Licensing: Invalid license"]/severity' \
-v 100 file.xml
Der Befehl Updates (-u
) den Wert von severity
Element durch den ursprünglichen Wert ersetzt (4
) mit 100
. Der XPath-Ausdruck wählt severity
Elemente für alle item
Elemente mit severity
Kind mit Wert 4
und modelDescription
Kind mit Wert Licensing: Invalid license
.
Das Ergebnis wird auf die Standardausgabe gedruckt. Um die Datei direkt zu bearbeiten, verwenden Sie --inplace
Option: xmlstarlet ed --inplace -u ...
.
Ausgabe
<?xml version="1.0"?>
<root>
<item>
<errorCode>4000</errorCode>
<severity>2</severity>
<modelDescription>Some error</modelDescription>
</item>
<item>
<errorCode>4544</errorCode>
<severity>100</severity>
<modelDescription>Licensing: Invalid license</modelDescription>
</item>
</root>
Bitte verwenden Sie keine Begriffe wie "gigantisch". Verwenden Sie Zahlen (wir sind schließlich Ingenieure). Es könnte die Antwort gut beeinflussen. –