Vim如何在文件中删除行的一部分

7
我可以帮助您进行翻译。以下是需要翻译的内容:

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

<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个回答

11

只需使用替换

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

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

这些命令在许多情况下都非常有用,尤其是在使用正则表达式时。您可以在此处找到更多信息。


2
这两个命令应该就可以解决问题了:
:%s/<\w*>//
:%s/<\/\w*>//

第一步将所有的开标签替换为空。第二步将所有的闭标签替换为空。<\w*>匹配在<>之间的任意数量的字母数字字符,<\/\w*>匹配在</>之间的任意数量的字母数字字符。
编辑:更简单的方法:
:%s/<.\{-}>//g

请注意以下内容:
:%s/<.*>//g

因为*是“贪婪”的,会匹配整行,所以这个方法不可行。使用\{-}可以避免这个问题。关于贪婪模式的更多信息请阅读:http://vimregex.com/#Non-Greedy


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接