Vim批量删除/替换XML标签,但不是内容

时间:2014-03-24 04:38:42

标签: html vim replace tags

我有一组XML,想要删除或替换所有标记

ie)<name>John doe</name>我希望只留下John DoeJohn Doe,

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

对于<name>John doe</name>的确切文本匹配,您可以使用以下:substitute命令:

:%s#<name>\(John doe\)</name>#\1#g

这将捕获标记内的名称(假设其内容可能不同),并将整个匹配替换为第一个捕获的组(\1)。

有关详细信息,:help :substitute包含所有详细信息。了解如何查找命令并导航内置:help;它是全面的,并提供了许多提示。你不会像其他编辑那样快速学习Vim,但如果你致力于不断学习,那么它将成为一个非常强大和高效的编辑器。

此基本替换适用于Vim以及sed。对于多个文件的自动处理,我更喜欢后者。

关于使用正则表达式解析XML的严厉警告

请注意,XML是一种相当复杂的格式,具有许多等效表示形式。正则表达式不足以正确处理所有可能的变体。如果您知道源文档是以特定格式格式良好的,并且对结果进行了以下检查,那么快速替换是没有问题的,但我不会将其用于自动化和生产。这项工作有更好的工具(例如XSLT)。有关详细讨论,请参阅this answer

答案 1 :(得分:0)

使用以下行创建vim脚本文件。我们称之为script.vim

%s/john doe/John Doe/gie
wa

然后,执行命令vim -c "source script.vim" file.xml