用 header 和主标签将 xml body 括起来
Enclose xml body with header and main tag
我有一个 xml 文件,其结构来自 xmllint:
<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
但还是缺少</data>
。基本上我的想法是用 header 和一个名为 <data></data>
的主标签将 test.xml 中的文本括起来
sed -e '1i\<?xml version="1.0" encoding="UTF-8"?><data>' -e '$a\</data>' test.xml > test1.xml
这里的主要技巧是将 $a\</data>
放在它自己的 -e
标志后面,这样它就不会被解释为要在第一行之前插入的更多原始文本。
这会给你有效的 XML。对于问题中的精确输出,使用
sed -e '1i\<?xml version="1.0" encoding="UTF-8"?>' -e '1i\<data>' -e '$a\</data>' -e 's/^/ /'
左右。但是,如果是我,我只会使用 sed 使数据有效 XML 并使用那里的 XML 工具(即,使用第一个片段并通过 xmllint 进行缩进)。使用 sed 处理结构化数据通常很脆弱,因此您不希望这样做的时间超过必须的时间。
我有一个 xml 文件,其结构来自 xmllint:
<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
但还是缺少</data>
。基本上我的想法是用 header 和一个名为 <data></data>
sed -e '1i\<?xml version="1.0" encoding="UTF-8"?><data>' -e '$a\</data>' test.xml > test1.xml
这里的主要技巧是将 $a\</data>
放在它自己的 -e
标志后面,这样它就不会被解释为要在第一行之前插入的更多原始文本。
这会给你有效的 XML。对于问题中的精确输出,使用
sed -e '1i\<?xml version="1.0" encoding="UTF-8"?>' -e '1i\<data>' -e '$a\</data>' -e 's/^/ /'
左右。但是,如果是我,我只会使用 sed 使数据有效 XML 并使用那里的 XML 工具(即,使用第一个片段并通过 xmllint 进行缩进)。使用 sed 处理结构化数据通常很脆弱,因此您不希望这样做的时间超过必须的时间。