sed コマンドを使用して xml ファイル内の文字を検索して置換することができません

sed コマンドを使用して xml ファイル内の文字を検索して置換することができません

myfile.xmlという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>

この変化を望んでいる

<!--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>

私はsedコマンドを次のように使用して、すべての&を&に変更しています。

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

しかし、「undefined label 'yfile.xml'」というエラーが発生します。これ以上進むことができません。どうすればいいでしょうか?

答え1

もし持っていないならGNU sedsedパラメータが必要です-i

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

バックアップファイルを用意しておくのも良いでしょう。

…Perlを使用する;)

テスト

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

そしてインプレース編集

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

しかし、一度だけです。

コマンドの後の内容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>

答え2

特殊文字のため、& を脱出する必要があります。完了するには 2 つのパスが必要です。

使用方法:
1.sed 's|Hi\&|Hi\&amp;|g' yourfile.xmlこれによって以下が生成されます:

<!--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. 2 回目のパスは次のようになります:sed 's|Hello\ \&| \Hello\ \&amp;|g' test.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>
    

    もちろん、-i永続的にするにはスイッチを使用します。

以下の @terdon のコメントに基づいたもう 1 つの高度な方法は次のとおりです。

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

関連情報