嗨,我有一个超大的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查询。谢谢!
发布于 2015-05-25 17:34:44
如果您使用的是UNIX,并且已知文件总是采用这种格式,那么使用sed可能是最容易的。
sed -e '2000001d' infile > outfile如果需要解析实际的XML结构,可以考虑使用xml-sed。
发布于 2015-05-26 17:56:27
假设您想删除前五个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.xmlhttps://stackoverflow.com/questions/30435029
复制相似问题