我在某些行上有一个字符串为“ERROR”的日志文件。我想删除不有错误的每一行,以便我可以看到需要修复的内容。我打算在vim中执行以下操作:
%S /!(ERROR)//
用空字符串替换非错误行。
我不相信标准的正则表达式可以做到这一点,但也许我错了......
答案 0 :(得分:53)
使用:g!
命令删除不匹配的每一行。
:g!/ERROR/d
答案 1 :(得分:8)
在vim中,您可以对缓冲区中的文本运行任何过滤器命令。例如,
:%!grep ERROR
将仅使用与给定正则表达式匹配的行替换整个缓冲区。
这不仅仅适用于grep
,例如,您可以使用:%!sort
对缓冲区中的行进行排序。或者,您可以使用V
命令对任何文本范围执行相同操作以标记块,然后:!filter-command
(vim将自动填写'<,'>
以指示当前标记的块)。
答案 2 :(得分:1)
如果在* nix上,您可以使用grep -v或awk
awk '!/ERROR/' file | more
在Windows机器上,您可以使用findstr
findstr /v /c:ERROR file | more
答案 3 :(得分:1)
使用negative lookahead工作。
答案 4 :(得分:0)
负匹配正则表达式将使用^ 例如。 [^ E]将匹配除E之外的所有内容。