Ein & in XML richtig ersetzen?

Ein & in XML richtig ersetzen?

& Ich möchte ein „&“ durch „Außer bei den folgenden XML-Sonderzeichen“ ersetzen .

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

Ich habe die Methode ausprobiert, die inAngegebenes Zeichen zwischen zwei Zeichenfolgen ersetzen?UndErsetzen aller `&`, aber nicht des in der XML-Entität `&` durch `#` mit sed in einem bestimmten XML-Tagscheint bei mir nicht zu funktionieren.

Antwort1

Verwenden eines Perl-Einzeilers:

perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g'

Das -pFlag bewirkt, dass sich Perl wie sed verhält (über STDIN-Zeilen schleifen, Dinge tun, auf STDOUT drucken) und -eweist es an, den Befehl vom Argument und nicht von der Datei zu lesen.

Die Ersetzung regulärer Ausdrücke bewirkt Folgendes:

  • übereinstimmen&
    • nicht gefolgt von
    • quotoder apos...amp
    • Semikolon
  • ersetzen mit&amp;
  • für alle Spiele online.

Um es wie sed zu verwenden, zB

perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g' < my-file.xml
./myscript.sh | perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g'

verwandte Informationen