Usando um perl one-liner:
perl -pe 's/&(?!(quot|apos|lt|gt|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
ouapos
...amp
- ponto e vírgula
- substitua por
&
- para todos os jogos on-line.
Para usá-lo como sed, por exemplo,
perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g' < my-file.xml
./myscript.sh | perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g'