2017-05-09 18 views
1

sedが新しく、XMLタグ間で複数のXMLコードを検索して置き換えるのが難しいです。ここで私は、複数行の sed "s/\(<Id>\).*\(<\/Id\)/\19999\2/" input.xml > output.xmlが、その一行のために働いてではなく、を使用sedを使用してXMLマルチラインタグ内のテキストを置き換えます

<List> 
    <User> 
     <Id>1234</Id> 
     <Info> 
      <Id>11</Id> 
     </Info> 
    </User> 
</List> 

Iになるリストタグ間のXMLコードを交換したい。..

<List> 
    <Replace> 
    <Id> 223 <Id> 
    </Replace> 
</List> 

XMLコードのサンプルです。 Listタグ間の内容は変更される可能性があり、インラインである可能性もあります。特定のパターンには返信できませんが、タグだけに依存する必要があります。どのような助けや指針をいただければ幸いですか?

+2

xmlを解析するために正規表現を使用しないでください。この投稿を参照してください。http://stackoverflow.com/questions/9200462/simplest-way-to-do-basic-xml-parsing-from-unix-command-line – Lynch

+1

bash/awkでXMLを処理するのが最良ではありません。堅牢で最も安全な)方法であるが、個人的/デバッグ目的のために迅速かつ汚れた解決策を提供することができる。だから、あなたはこれらのQ/Asを考えるかもしれません:[SO:ソースファイルからのデータを使ってXMLファイルからブロックを得る](http://stackoverflow.com/questions/43642559/get-a-block-from-an- xml-file-from-source-file/43704602?s = 1 | 0.0000#43704602)、[SO:シェルスクリプト - xmlを複数のファイルに分割](http://stackoverflow.com/questions/ 42625786/shell-scripting-split-xml-multiple-files/42626222?s = 6 | 0.0000#42626222)。 – Scheff

答えて

0

あなたが本当にリンチのアドバイスを無視したい場合は、これはそれを行うだろうが、あなたはそれを再飾り立てるする必要があります。

sed -e ':a;N;$!ba' -e 's#<List.*</List>#<List>\n<Replace>\n<Id> 223 <Id>\n</Replace>\n</List>#' input.xml > output.xml 

それはおそらくSEDのGNUバージョンを必要とします。

関連する問題