如何使用grep或类似工具排除匹配的几行?

时间:2012-02-25 06:54:45

标签: awk grep ack

我可以使用grep -v 'my_pattern' some_file找到所有不匹配的文件行。此外,我可以在与grep的-A-B-C选项匹配之前/之后/周围打印几个字符串。但是我无法将这两个选项组合在一起排除具有模式的行和匹配行附近的一定数量的行 - grep将结果显示为整个文件。例如,我记录了很多这样的模式:

25.02.2012 10:41:37 here goes memory state
25MiB free
16MiB allocated
max free block is 4MiB

我想过滤它们。当然,我可以编写自定义的perl / awk脚本,但有更优雅的方法吗?

2 个答案:

答案 0 :(得分:1)

一个grep解决方案:

grep -C2 pattern file | grep -vFf- file

这使用grep -C2file中获取您要排除的行。

然后grep -vFf-从stdin中提取这些行,并报告所有不匹配的行。

警告:这将消除所有与file中其他位置的“上下文”匹配的行。因此,如果上下文包含空白行,则将删除所有空白行。

答案 1 :(得分:0)

您可以使用 vim 文字编辑器:

:g/my_pattern/-2,//+2d