解析日志文件时,我经常使用: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/