Localizar e substituir um caractere no arquivo xml usando o comando sed não está funcionando [fechado]

-1

Eu tenho um arquivo xml chamado myfile.xml

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&Welcome</c>
   </b>
   <d>Hello & How are you?</d>
</a>

Eu quero essa transformação

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello &amp; How are you?</d>
</a>

Estou usando o comando sed da seguinte maneira para alterar todas as ocorrências de & amp; em & amp;

sed -i 's:&:&amp;:' myfile.xml

mas estou recebendo o erro 'indefinido label' yfile.xml '. Eu não posso prosseguir. Como fazer isso?

    
por jsd 05.10.2015 / 15:21

2 respostas

2

Se você não tem o GNU sed , sed precisa de um parâmetro para -i

sed -i.bak 's:&:&amp;:' myfile.xml

e um arquivo de backup é uma boa ideia ou…

… use Perl ;)

Teste com

perl -pe 's/&/&amp;/' myfile.xml

e faça um inplace edit com

perl -pi -e 's/&/&amp;/' myfile.xml

Mas apenas uma vez.

Após o comando, o conteúdo de myfile.xml é

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello &amp; How are you?</d>
</a>
    
por A.B. 05.10.2015 / 15:47
-1

Você precisa escapar & amp; por causa do caráter especial. E você precisa de dois passes para completá-lo.

Uso:
1. sed 's|Hi\&|Hi\&amp;|g' yourfile.xml . Isso produzirá:

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello & How are you?</d>
</a>
  1. A segunda passagem será: sed 's|Hello\ \&| \Hello\ \&amp;|g' test.xml . Produz:

    <!--This is an xml document for test-->
    <a><!--This is root node-->
       <b>
        <c>Hi&amp;Welcome</c>
       </b>
       <d> Hello &amp; How are you?</d>
    </a>
    

    Claro, use -i para torná-lo permenant.

Outra maneira avançada com base no comentário @terdon abaixo é:

sed -e 's/Hello &/Hello \&amp;/' -e 's/Hi&/Hi\&amp;/' filename.xml

    
por Aizuddin Zali 05.10.2015 / 15:34