用标题和主标记将xml正文括起来

用标题和主标记将xml正文括起来,xml,linux,sed,xmllint,Xml,Linux,Sed,Xmllint,我从xmllint获得了一个具有以下结构的xml文件: <Entities> <Name>John</Name> </Entities> <Entities> <Name>David</Name> </Entities> 约翰 大卫 现在,我想将该文件转换为以下格式: <?xml version="1.0" encoding="UTF-8"?> <data>

我从xmllint获得了一个具有以下结构的xml文件:

<Entities>
    <Name>John</Name>
</Entities>
<Entities>
    <Name>David</Name>
</Entities>

约翰
大卫
现在,我想将该文件转换为以下格式:

<?xml version="1.0" encoding="UTF-8"?>
<data>
   <Entities>
      <Name>John</Name>
   </Entities>
   <Entities>
      <Name>David</Name>
   </Entities>
</data>

约翰
大卫
我怎样才能用sed做到这一点?我试过这个

sed -e '1i\<?xml version="1.0" encoding="UTF-8"?><data>' test.xml > test1.xml
sed-e'1i\'test.xml>test1.xml
但是仍然缺少
。基本上,我的想法是用标题和名为


大概吧。但是,如果是我,我只会使用sed使数据成为有效的XML,并从那里使用XML工具(即,使用第一个片段和管道通过xmllint进行缩进)。使用sed处理结构化数据通常是脆弱的,因此您不想做得太久。

使用正则表达式
sed -e '1i\<?xml version="1.0" encoding="UTF-8"?><data>' -e '$a\</data>' test.xml > test1.xml
sed -e '1i\<?xml version="1.0" encoding="UTF-8"?>' -e '1i\<data>' -e '$a\</data>' -e 's/^/    /'