查找并替换一堆XML标记

时间:2015-01-09 11:54:29

标签: regex shell vim scripting

我有一个简单的问题。我有一个包含数百万XML格式数据的大文件。我必须找到如下所有的标签,并替换它们。有什么帮助请用vim或sed吗?

    <dtlsEntry>
    <dataTyp></dataTyp>
    <dataDtls></dataDtls>
    </dtlsEntry>

如果您观察到这一点,则xml标记中不存在任何值。我想删除从dtlsEntry到dtlsEntry

的完整XML

1 个答案:

答案 0 :(得分:0)

如评论中所示,在一般情况下,使用单个正则表达式可靠地执行此操作可能很困难或不可能。但是你可能有一个非常具体的案例。添加任何复杂性,它会很快变得难看。 如果XML中的注释永远不存在,并且属性也没有,并且如果有保证的顺序,这应该在Vim中进行,但可能很慢:

:%s#<dtlsEntry\_s*>\_s*<dataTyp\_s*></dataTyp\_s*>\_s*<dataDtls\_s*></dataDtls\_s*>\_s*</dtlsEntry\_s*>##

我在这里使用的唯一技巧是插入\_s*允许任意空格,以匹配包括换行符在内的任何空格。例如,如果在dataTyp标记内可以有空格,则可能需要添加更多这些内容。但同样,请注意上面的所有警告和限制。消除任何这些限制将增加复杂性;事实上,特别是允许完整的评论支持可能使它几乎不可能。