
Quero substituir um '&' por &
Exceto a seguinte ocorrência de caracteres especiais XML.
" "
' '
< <
> >
& &
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);)/&/g'
O -p
sinalizador faz com que o perl se comporte como sed (loop sobre linhas STDIN, faça coisas, imprima em STDOUT), -e
diz 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
quot
ouapos
...amp
- ponto e vírgula
- substituir com
&
- 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'