通过bash /终端删除空的XML标签
问题描述:
是否有一种简单的方法从终端内的xml文件中删除一组特定的xml标签?通过bash /终端删除空的XML标签
我想删除的所有标签都有一个column_1/2/3/4/5/6/7/8/9(某些数字)的模式。
我想保留虽然,column_1到column_9,并删除任何更高的。
答
IMHO这应该是足够的:
sed '/^ *<column_[0-9][0-9]\+ *\/> *$/d' file.xml > reduced.xml
编辑:
cat > test.xml << EOF
<column_1 />
<column_2 />
<column_9 />
<column_10 />
<column_1180 />
EOF
sed '/^ *<column_[0-9][0-9][0-9]* *\/> *$/d' test.xml
输出:
<column_1 />
<column_2 />
<column_9 />
如果有多于一个的出现在一个行:
echo "<column_1 /><column_2 /><column_9 /><column_10 /><column_1080 />" > test2.xml
sed 's/<column_[0-9][0-9][0-9]* *\/>//g' test2.xml
输出:
<column_1 /><column_2 /><column_9 />
能否请您发表你想同时处理之前和之后处理XML文件的例子吗? – 2012-01-30 20:37:57
XSLT是否适合您的环境? Linux和Windows上有命令行处理器'xsltproc'。还有Java中的XSLT处理器。 – Lumi 2012-01-30 20:38:20
文件本身是50 MB。问题是,所有的空标签都会导致解析器耗尽内存,即使我试图用PHP或正则表达式从命令行中删除它们。每个节点都有列1至列9,其中包含实际数据,1721个节点包含数据。问题是,每行都有从column_10到column_1800的空模糊标签,它们是空的,是OpenOffice XSLX-> XML转换的副产品。 – Kevin 2012-01-30 20:40:52