3

我可以找到所有不匹配的文件行grep -v 'my_pattern' some_file。我也可以在匹配之前/之后/前后打印几个字符串-A-B或者-Cgrep 的选项。但是我不能结合这两个选项来排除带有模式的行和匹配行附近的某些行 - grep 显示整个文件作为结果。例如,我有很多这样的模式的日志:

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

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

4

2 回答 2

1

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

:g/my_pattern/-2,//+2d
于 2012-02-25T07:52:55.680 回答
1

一个 grep 解决方案:

grep -C2 pattern file | grep -vFf- file

这用于grep -C2获取file您希望排除的行。

然后grep -vFf-从标准输入中获取这些行并报告所有不匹配的行。

注意:这将消除所有与 .context 中其他地方匹配的行file。因此,如果上下文包含一个空行,您将删除所有空行。

于 2020-10-22T17:44:47.917 回答