複数行の文字列を別の文字列に挿入

複数行の文字列を別の文字列に挿入

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どちらにしても大丈夫です。

関連情報