您好我有一个超大的xml文件(40+ GB)。简化的结构是
<xml>
<element>111</element>
<element>222</element>
<element>333</element>
<element>444</element>
<element>555</element>
<element>666</element>
...
</xml>
我尝试删除2,000,000个元素,但我不知道该元素的内容。我有办法这样做吗?搜索了几个小时但只找到了基于属性的xml查询。谢谢!
答案 0 :(得分:0)
如果您使用的是UNIX,并且知道该文件始终采用该格式,则使用sed
可能最容易。
sed -e '2000001d' infile > outfile
如果您需要解析实际的XML结构,可以考虑xml-sed
。
答案 1 :(得分:0)
假设您要删除前五个element
。首先,获取第一个开头<element>
的行。
$ opening=$(grep -n '<element>' < x.xml | head -1 | cut -d: -f1)
然后获得第五个结束</element>
的行。
$ closing=$(grep -n '</element>' < x.xml | head -n5 | tail -1 | cut -d: -f1)
现在删除从opening
到closing
的行。
$ sed "${opening},${closing}d" < x.xml
输出:
<xml>
<element>666</element>
</xml>
如果您不确定XML文件的格式,请使用xmllint
进行清理。
$ xmllint -format x.xml