¿Reemplazar un & en XML correctamente?

¿Reemplazar un & en XML correctamente?

Quiero reemplazar un '&' con & Excepto la siguiente aparición de caracteres especiales XML.

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

Probé el método mencionado en¿Reemplazar el carácter especificado entre dos cadenas?yReemplazar todo `&` pero no el de la entidad XML `&` con `#` con sed en una etiqueta XML determinadano parece funcionar para mí.

Respuesta1

Usando una sola línea de Perl:

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

El -pindicador hace que Perl se comporte como sed (recorre las líneas STDIN, hace cosas, imprime en STDOUT), -ele dice que lea el comando desde el argumento, no desde el archivo.

La sustitución de expresiones regulares hace esto:

  • fósforo&
    • no seguido por
    • quoto apos...amp
    • punto y coma
  • reemplazar con&amp;
  • para todos los partidos en línea.

Para usarlo como sed, por ejemplo

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'

información relacionada