XMLファイルに行を挿入する必要があります。
入れる
<one>
</one>
入力する
<tags>
</tags>
得る
<tags>
<one>
</one>
</tags>
私はこれを試しました:
sed "s#\\(< /tags>\\)#${multiline_string}\1#"
しかし、インデントは失われます。
答え1
Matが言ったように、インデント(そして一般的に空白)はXMLファイルにとって重要ではありません。これ:
<one><tags></tags></one>
以下とまったく同じです。
<one>
<tags>
</tags>
</one>
しかし、これはインデントを維持しながら機能します。
$ cat myfile.xml
<tags>
</tags>
$ sed '/<one>/ a\
<tags>\
</tags>
' myfile.xml > newfile.xml
$ cat newfile.xml
<one>
<tags>
</tags>
</one>
...しかし、XMLで作業している場合は、実際にXMLを解析し、プログラムでツリーを操作できる高度な言語の使用を検討することができます。
答え2
以下は、質問に表示されたコードを修正したものです。
$'\n'
これはケシ(またサポート強く打つそして扱いにくい)方法を使用して改行を行うため、他のシェルを使用している場合は必要に応じて調整してください。
sed "s|\(</tags>\)|${multiline_string//$'\n'/\n}\1|g"
末尾はg
あなたの場合に適しています。可能1行で複数回発生します</tags>
。あなたの場合は必要ないようですが、xml
どちらにしても大丈夫です。