在vim
:g/George Bush/d
删除所有行与乔治·布什。
如果我想删除下面从乔治·布什开始的5行怎么办?
另一个现实的例子是在log4net日志中找到所有DEBUG,并删除直到堆栈跟踪结束(我知道将在其下面另外10行)
:global命令是你的朋友 – 学习得很好。它允许你运行任意:ex命令在每一行匹配正则表达式。它缩写为:g。
原文链接:https://www.f2er.com/bash/389774.html要删除与“George Bush”匹配的所有行:
:g/George Bush/ d
后面的命令可以有自己的地址/范围前缀,它将相对于匹配的行。所以删除第5行后乔治·布什:
:g/George Bush/ .+5 d
要删除DEBUG日志条目:
:g/DEBUG/ .,+10 d
如果你知道堆栈跟踪是可变长度,但总是在空白行(或其他正则表达式)结束:
:g/DEBUG/ .,/^$/ d
你也可以在不匹配的每一行上执行一个命令:g!例如在不包含“吮吸”一词的每一行上用“奥巴马”代替“布什”:
:g!/sucks/ s/Bush/Obama/
默认命令是打印消息窗口的行。例如以列出标记为TODO的每一行:
:g/TODO
这也有助于检查正则表达式匹配您预期之前,你做一些破坏性的行。
您可以使用“|”链接多个命令。例如改变布什到奥巴马和乔治到巴拉克每行不包含“吮吸”:
:g!/sucks/ s/Bush/Obama/g | s/George/Barack/g