带负匹配的正则表达式(即查找_doesn't_匹配正则表达式的字符串)

Ale*_*ird 30 regex vi vim

我有一个日志文件,在某些行上有字符串"ERROR".我想删除没有 ERROR的每一行,以便我可以看到需要修复的内容.我打算在vim中执行以下操作:

%S /!(错误)//

用空字符串替换非错误行.

我不相信标准的正则表达式可以做到这一点,但也许我错了......

too*_*php 53

使用该:g!命令删除不匹配的每一行.

:g!/ERROR/d
Run Code Online (Sandbox Code Playgroud)

  • `:v/ERROR/d`是等价的 (25认同)

Gre*_*ill 8

在vim中,您可以对缓冲区中的文本运行任何过滤器命令.例如,

:%!grep ERROR
Run Code Online (Sandbox Code Playgroud)

将仅使用与给定正则表达式匹配的行替换整个缓冲区.

这不仅仅是有用的grep,例如,您可以使用缓冲区对行进行排序:%!sort.或者,您可以使用V命令标记块然后对任何范围的文本执行相同操作:!filter-command(然后vim会自动填写'<,'>以指示当前标记的块).