
Quiero reemplazar un '&' con &
Excepto la siguiente aparición de caracteres especiales XML.
" "
' '
< <
> >
& &
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);)/&/g'
El -p
indicador hace que Perl se comporte como sed (recorre las líneas STDIN, hace cosas, imprime en STDOUT), -e
le 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
quot
oapos
...amp
- punto y coma
- reemplazar con
&
- para todos los partidos en línea.
Para usarlo como sed, por ejemplo
perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g' < my-file.xml
./myscript.sh | perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g'