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 `</`
只需使用替换 regex:
:%s/<[^>]*>//g
这将为每一行 (%
) 应用 s
(替换)命令,并删除整行 (g
) 的所有 <...>
序列。
这些命令在很多情况下都能派上用场,尤其是使用正则表达式时。您可以找到有关它的更多信息 here。
这两个命令应该可以解决问题:
:%s/<\w*>//
:%s/<\/\w*>//
第一个将所有开始标签替换为空。第二个将所有结束标记替换为空。 <\w*>
匹配 <
和 >
之间的任意数量的字母数字字符,<\/\w*>
匹配 </
和 >
之间的任意数量的字母数字字符。
编辑:更简单的方法:
:%s/<.\{-}>//g
注意这个:
:%s/<.*>//g
将不起作用,因为 *
是 "greedy" 并且将匹配整行。 \{-}
是非贪婪等价物。在此处阅读有关贪婪的更多信息:http://vimregex.com/#Non-Greedy
我有一个大文件包含许多行,格式如下,
<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 `</`
只需使用替换 regex:
:%s/<[^>]*>//g
这将为每一行 (%
) 应用 s
(替换)命令,并删除整行 (g
) 的所有 <...>
序列。
这些命令在很多情况下都能派上用场,尤其是使用正则表达式时。您可以找到有关它的更多信息 here。
这两个命令应该可以解决问题:
:%s/<\w*>//
:%s/<\/\w*>//
第一个将所有开始标签替换为空。第二个将所有结束标记替换为空。 <\w*>
匹配 <
和 >
之间的任意数量的字母数字字符,<\/\w*>
匹配 </
和 >
之间的任意数量的字母数字字符。
编辑:更简单的方法:
:%s/<.\{-}>//g
注意这个:
:%s/<.*>//g
将不起作用,因为 *
是 "greedy" 并且将匹配整行。 \{-}
是非贪婪等价物。在此处阅读有关贪婪的更多信息:http://vimregex.com/#Non-Greedy