Substituindo tudo '&', mas não o da entidade XML '&' com '#' com sed em uma determinada tag XML

1

Eu precisava substituir todos os & por # , dentro e somente dentro da tag <faultstring> ... </faultstring> . Além disso, o & em &amp; não deve ser alterado. Exemplo de entrada:

123&&<faultcode>IBM.Error<faultstring>special character & and one converted &amp;</faultstring></faultcode>&&123

Resultado esperado:

123&&<faultcode>IBM.Error<faultstring>special character # and one converted &amp;</faultstring></faultcode>&&123

O seguinte trabalha com o limite, mas também substitui o &amp; por #amp;

sed -e :1 -e 's@\(<faultstring>.*\)&\(.*</faultstring>\)@#@;t1'

Além disso, estou substituindo esses padrões por um arquivo.

PS: criei uma nova pergunta para evitar confusão em meu tópico anterior . Se vocês acharam que isso pode ser mesclado no tópico anterior, faça isso. Só espero que esse novo tópico atraia as pessoas para responder rapidamente e minimizar a confusão.

    
por kemaro 29.08.2014 / 07:28

1 resposta

2

Isso funcionou para mim:

sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@#@;t1' file

Para substituí-lo por &amp; use isto:

sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@\&amp;@;t1' file
    
por 29.08.2014 / 08:04