Vim 删除文件中的部分行

Vim remove part of line in a file

我有一个大文件包含许多行,格式如下,

<SomeString1>Key1</SomeString>
<SomeString2>Key2</SomeString>
<SomeString3>Key3</SomeString>
...

我想删除标签,输出应该如下所示,

 Key1
 Key2
 Key3
 ...

从算法上讲,我应该这样写:

For all lines:
   Remove all string before character `>`
   Remove all string after character `</`

只需使用替换 :

:%s/<[^>]*>//g

这将为每一行 (%) 应用 s(替换)命令,并删除整行 (g) 的所有 <...> 序列。

这些命令在很多情况下都能派上用场,尤其是使用正则表达式时。您可以找到有关它的更多信息 here

这两个命令应该可以解决问题:

:%s/<\w*>//
:%s/<\/\w*>//

第一个将所有开始标签替换为空。第二个将所有结束标记替换为空。 <\w*> 匹配 <> 之间的任意数量的字母数字字符,<\/\w*> 匹配 </> 之间的任意数量的字母数字字符。

编辑:更简单的方法:

:%s/<.\{-}>//g

注意这个:

:%s/<.*>//g

将不起作用,因为 * 是 "greedy" 并且将匹配整行。 \{-} 是非贪婪等价物。在此处阅读有关贪婪的更多信息:http://vimregex.com/#Non-Greedy