2017-09-29 9 views
0

ちょっと、この1つにこだわって、私はsedでXMLスニペットをフォーマットすると思います。フォーマットxml with sed

これは、元のコードスニペットです:

<input> 
    <program_name> 
      CS 
    </program_name> 
    <course_name> 
          ART CLASS 
    </course_name> 
    <instructor> 
       John Smith 
    </instructor> 
</input> 

私のsedコマンドでは、次のようにそれをフォーマットする必要があります。

<input> 
     <program_name>CS</program_name> 
     <course_name>ART CLASS</course_name> 
     <instructor>John Smith</instructor> 
    </input> 

これまでのところ私は、次のしている:残念ながら

sed -r 'N;N;s/<([a-z_]+)>(*\n* *)([[a-z]+ ?[a-z]+]+)(*\n* *)(<\1>)/<\1>\3\5/g' question.txt 

何も変わっていないようだが、ヒント/助けがあれば大歓迎です。

答えて

2

免責事項:ストリームエディタや正規表現は、我々は、タグマッチングに頼る必要はありませんでした。この場合には、XMLやHTMLなどのマークアップ言語を解析するための優れたツールではありませんが、あなたが実際に必要な場合は解析したり、空想何もしますbashのでXMLを、私は私はあなたがやりたい自分に切り替えることを選んだあなたの元の正規表現で十分な誤りを見つけHow to parse XML in Bash?


ここに行く:

s/>\s*\n\s*(\w.*\w)\s*\n\s*</>\1</ 

and here's a demo

のsedや試合を重ねた、あなたは良い複数行のbashスクリプトを書くためにこの質問をチェックアウトすることができますに正規表現タイプミスのほかに、あなたはバッファリング複数の行と他の問題に遭遇することがあります。編集のためHow can I replace a newline (\n) using sed?

+0

感謝をあなたの質問、私はあなたの正規表現のために持っていた "修正"を削除しただけで正規表現の問題を解決しなかったので –