31

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

%s/!(错误)//

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

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

4

5 回答 5

54

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

:g!/ERROR/d
于 2009-07-22T00:15:44.193 回答
8

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

:%!grep ERROR

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

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

于 2009-07-22T00:35:37.893 回答
1

使用负前瞻有效。

于 2010-04-05T18:26:51.570 回答
1

如果在 *nix 上,您可以使用 grep -v 或 awk

awk '!/ERROR/' file | more 

在 Windows 机器上,您可以使用 findstr

findstr /v /c:ERROR file | more
于 2009-07-22T00:32:29.283 回答
0

否定匹配的正则表达式将使用 ^ 例如。[^E] 将匹配除 E 之外的所有内容。

于 2009-07-22T00:19:00.933 回答