Regex 使用Vim将所有*非*匹配字符串替换为另一个字符串

Regex 使用Vim将所有*非*匹配字符串替换为另一个字符串,regex,search,vim,replace,Regex,Search,Vim,Replace,解析日志文件时,我经常使用:g//d删除日志中不包含感兴趣字符串的所有行。现在,我想使用这个强大的命令替换所有不匹配的字符串 我几乎找不到关于:g!,除了我已经使用的命令,并且格式是:g!//,其中cmd是一个ex命令,或vim中使用的:命令之一 因此,我认为可以使用s命令来执行此操作,但我对这方面的理解有限。有人能建议如何正确设置命令的格式吗?或者是否有其他更适合此任务的工具?sed/awk?我从未真正使用过这些,但我知道它们非常强大 另一种选择是,用Python编写一个实用程序来帮我完成这项

解析日志文件时,我经常使用:g//d删除日志中不包含感兴趣字符串的所有行。现在,我想使用这个强大的命令替换所有不匹配的字符串

我几乎找不到关于:g!,除了我已经使用的命令,并且格式是:g!//,其中cmd是一个ex命令,或vim中使用的:命令之一

因此,我认为可以使用s命令来执行此操作,但我对这方面的理解有限。有人能建议如何正确设置命令的格式吗?或者是否有其他更适合此任务的工具?sed/awk?我从未真正使用过这些,但我知道它们非常强大

另一种选择是,用Python编写一个实用程序来帮我完成这项工作。

首先,您可以使用:v作为:g!的快捷方式!。我认为,词源来自标准grep命令的-v选项

是的,您可以使用任何ex命令,包括:s。默认情况下,:s作用于一行;将其与:g或:g组合!或者:v您可以选择其作用的行。如果我理解正确,那么

:v/<string I want to keep>/s/.*//
这正是你想要的。你可能会想继续说:不

增编:我对这个简短的答案如此受欢迎感到有点惊讶。有趣的是,文档:help:g,然后向下滚动一点提到:%s/pat/pat/g作为替代,两个字符更短!致:g/pat/s//pat/g。我认为这意味着:g/pat/s/过去比:%s/pat/更熟悉


无耻的插件:有关:g和:s的更多信息,您可能还对我在linux上回答您可能更喜欢的问题感兴趣:

:%!grep STRING_YOU_WANT_TO_KEEP
:v/regex/norm!0D是另一个选项。另外:v/regex/pu|-d