通过bash /终端删除空的XML标签

问题描述:

是否有一种简单的方法从终端内的xml文件中删除一组特定的xml标签?通过bash /终端删除空的XML标签

我想删除的所有标签都有一个column_1/2/3/4/5/6/7/8/9(某些数字)的模式。

我想保留虽然,column_1到column_9,并删除任何更高的。

+0

能否请您发表你想同时处理之前和之后处理XML文件的例子吗? – 2012-01-30 20:37:57

+0

XSLT是否适合您的环境? Linux和Windows上有命令行处理器'xsltproc'。还有Java中的XSLT处理器。 – Lumi 2012-01-30 20:38:20

+0

文件本身是50 MB。问题是,所有的空标签都会导致解析器耗尽内存,即使我试图用PHP或正则表达式从命令行中删除它们。每个节点都有列1至列9,其中包含实际数据,1721个节点包含数据。问题是,每行都有从column_10到column_1800的空模糊标签,它们是空的,是OpenOffice XSLX-> XML转换的副产品。 – Kevin 2012-01-30 20:40:52

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 /> 
+0

试过了,没有效果。 – Kevin 2012-01-31 00:34:55

+0

你确定'\'之前+?它也可以用'[0-9] [0-9] [0-9] *'来完成......'另外,我们知道只是行上的一个字,允许填充的空格作为开始的'^*'并关闭'* $ /'任务?祝你们好运。 – shellter 2012-01-31 04:07:37

+0

@凯文:也许这是一个逃避'+'的问题。尝试第二个sed语句:'sed'/^* * $/d'' – sgibb 2012-01-31 06:58:36