regex - 使用 Vim 用另一个字符串替换所有 *非* 匹配的字符串

标签 regex search vim replace

解析日志文件时,我经常使用:g!/<string I want to keep in the log>/d从日志中删除所有不包含感兴趣字符串的行。好吧,现在我想使用这个强大的命令来替换所有与空行不匹配的字符串。

我在 :g! 上几乎找不到任何信息。 ,除了我已经使用的命令,格式是 :g!/<match string>/<cmd> ,其中 cmd是一个“ex 命令”,或者是 vim 中使用的 : 命令之一。

所以我认为可以使用 s命令来做到这一点,但我的理解在这方面是有限的。谁能建议如何正确格式化命令?或者是否有其他工具更适合此任务? (sed/awk?我还没有真正使用过它们,但知道它们非常强大)。

另一种选择是直接用 Python 编写一个实用程序来为我做这件事。

最佳答案

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

是的,您可以使用任何 ex 命令,包括 :s .默认情况下,:s作用于单行;与 :g 结合使用(或 :g!:v )您可以选择它所作用的行。如果我理解正确,那么

:v/<string I want to keep>/s/.*//

正是你想要的。您可能想要跟进 :noh .

附录:我对这个简短的回答如此受欢迎感到有些惊讶。有趣的是,文档( :help :g 然后向下滚动一点)提到了 :%s/pat/PAT/g作为 :g/pat/s//PAT/g 的替代方案(“缩短两个字符!”) .我认为这意味着 :g/pat/s/以前比:%s/pat/更熟悉.

无耻的插头:更多关于:g:s ,您可能也对我对 why :%s/^$//g is not equal to :g/^$/d in vim? 的回答感兴趣

关于regex - 使用 Vim 用另一个字符串替换所有 *非* 匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21084125/

相关文章:

ruby - 获取 Ruby 字符串中特定单词后的单词?

php - MySQL 正则表达式在 php 脚本中失败

java - 搜索二维数组越界

html - 每次更新站点地图都需要提交给搜索引擎吗?

regex - Vim 正则表达式不匹配字符类中的空格

java - 用于解析的正则表达式模式

ruby - 用于匹配德国邮政编码但不匹配的正则表达式

php - WordPress 实时搜索结果重定向至主页

django - 我不想在 VIM 中的 makeprg 之后看到空缓冲区

ruby-on-rails - Ctags 生成最新版本的 gems