我有一个大文件包含以下格式的许多行,
<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 `</`
答案 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