Vim删除文件中的部分行

时间:2015-06-26 00:21:19

标签: vim vi

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

<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 `</`

2 个答案:

答案 0 :(得分:9)

只需使用替换here

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

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

在很多情况下,这些命令会派上用场,特别是使用正则表达式。您可以找到有关它的更多信息{{3}}。

答案 1 :(得分:2)

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

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

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

编辑:更简单的方法:

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

请注意:

:%s/<.*>//g

无效,因为*是“贪婪的”并且会匹配整行。 \{-}是非贪婪的等价物。阅读更多关于贪婪的信息:http://vimregex.com/#Non-Greedy