Isso funcionou para mim:
sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@#@;t1' file
Para substituí-lo por &
use isto:
sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@\&@;t1' file
Eu precisava substituir todos os &
por #
, dentro e somente dentro da tag <faultstring> ... </faultstring>
. Além disso, o &
em &
não deve ser alterado. Exemplo de entrada:
123&&<faultcode>IBM.Error<faultstring>special character & and one converted &</faultstring></faultcode>&&123
Resultado esperado:
123&&<faultcode>IBM.Error<faultstring>special character # and one converted &</faultstring></faultcode>&&123
O seguinte trabalha com o limite, mas também substitui o &
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.
Isso funcionou para mim:
sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@#@;t1' file
Para substituí-lo por &
use isto:
sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@\&@;t1' file
Tags sed xml regular-expression