Bashでタグを使用してファイルをラップする方法

Bashでタグを使用してファイルをラップする方法

次のように、ルートタグなしでxml呼び出されたファイルがあります。test.xml

<cat></cat>
<name></name>
<id></id>
<cat></cat>
<name></name>
<id></id>

出力が次のようにファイルをルートタグにラップするにはどうすればよいですか?

<root>
  <cat></cat>
  <name></name>
  <id></id>
  <cat></cat>
  <name></name>
  <id></id>
</root>

答え1

リダイレクトでこれを行うことができます。

(echo "<root>"; cat test.xml; echo "</root>") > wrapped-test.xml

インデントを使用すると、次のようになります。

(echo "<root>"; sed 's/^/  /' test.xml; echo "</root>") > wrapped-test.xml

答え2

最初の行の前に()を開くタグを挿入し、i\最後の行()の後に$()をa\閉じるタグを追加します(スペースの書式は気にしません)。

編集するGNU:どのバージョンが必要かを言及するのを忘れました。sed

コンテンツscript.sed:

1 i\
<root>
$ a\
</root>

次のように実行します。

sed -f script.sed infile

次の出力に:

<root>
<cat></cat>
<name></name>
<id></id>
<cat></cat>
<name></name>
<id></id>
</root>

関連情報