我有一组XML,想要删除或替换所有标记
ie)<name>John doe</name>
我希望只留下John Doe
或John Doe,
感谢您的帮助
答案 0 :(得分:1)
对于<name>John doe</name>
的确切文本匹配,您可以使用以下:substitute
命令:
:%s#<name>\(John doe\)</name>#\1#g
这将捕获标记内的名称(假设其内容可能不同),并将整个匹配替换为第一个捕获的组(\1
)。
有关详细信息,:help :substitute
包含所有详细信息。了解如何查找命令并导航内置:help
;它是全面的,并提供了许多提示。你不会像其他编辑那样快速学习Vim,但如果你致力于不断学习,那么它将成为一个非常强大和高效的编辑器。
此基本替换适用于Vim以及sed
。对于多个文件的自动处理,我更喜欢后者。
请注意,XML是一种相当复杂的格式,具有许多等效表示形式。正则表达式不足以正确处理所有可能的变体。如果您知道源文档是以特定格式格式良好的,并且对结果进行了以下检查,那么快速替换是没有问题的,但我不会将其用于自动化和生产。这项工作有更好的工具(例如XSLT)。有关详细讨论,请参阅this answer。
答案 1 :(得分:0)
使用以下行创建vim脚本文件。我们称之为script.vim
%s/john doe/John Doe/gie wa
然后,执行命令vim -c "source script.vim" file.xml
。