Substituir um & em XML corretamente?

4

Eu quero substituir um '&' com & Exceto a seguinte ocorrência de caracteres especiais XML.

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

Eu tentei o método mencionado em Substituir caractere especificado entre duas strings? e Substituindo todos os & mas não o da entidade XML "&" com '#' com sed em uma determinada tag XML não parece funcionar para mim.

    
por Mani 17.02.2016 / 13:25

1 resposta

4

Usando um perl one-liner:

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

O -p flag faz o perl se comportar como o sed (fazer o loop sobre as linhas STDIN, fazer as coisas, imprimir no STDOUT), -e diz para ler o comando do argumento não arquivo.

A substituição de expressões regulares faz isso:

  • corresponde a &
    • não seguido por
    • quot ou apos ... amp
    • ponto e vírgula
  • substitua por &amp;
  • para todos os jogos on-line.

Para usá-lo como sed, por exemplo,

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'
    
por 17.02.2016 / 14:52