Substituindo um & em XML corretamente?

Substituindo um & em XML corretamente?

Quero substituir um '&' por & Exceto a seguinte ocorrência de caracteres especiais XML.

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

Eu tentei o método mencionado emSubstituir o caractere especificado entre duas strings?eSubstituindo todos os `&`, mas não aquele na entidade XML `&` por `#` com sed em uma determinada tag XMLnão parece funcionar para mim.

Responder1

Usando uma linha perl:

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

O -psinalizador faz com que o perl se comporte como sed (loop sobre linhas STDIN, faça coisas, imprima em STDOUT), -ediz para ele ler o comando do argumento e não do arquivo.

A substituição de expressão regular faz isso:

  • corresponder&
    • não seguido por
    • quotou apos...amp
    • ponto e vírgula
  • substituir com&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'

informação relacionada