从输出中删除2行,grep匹配正则expression式加上下一个1

我有一个来自postgresql的日志文件,它具有格式的日志条目;

LOG: execute <unnamed>: /match this here/ DETAIL: parameters: /also want to filter this line/ 

我认为这可能是可能的

 grep -v --after-context=1 'match this here' /my/log/file.log 

但它不起作用。 有一些sed / awk / grep的魔术,还是我必须做一些Perl?

据我所知,你不能单独做grep。
awk可以做到这一点非常简单:

awk -v skip=-1 '/match this here/ { skip = 1 } skip-- >= 0 {next } 1' /my/log/file.log

编辑:
我认为你不能通过任何正则expression式匹配第二行,你真的想匹配包含X和行之后的行。 如果你可以匹配一个string,这是很容易的:

egrep -v "match this here|also want to filter this line" /my/log/file.log

另一种使用awk的方法是:

 awk '/match this here/ {getline; next} {print}' file.log 

您是否打算使用“-v”来防止“匹配此处”显示第一行? “-v”会颠倒你的表情,说“不匹配的显示行匹配这里”。 我现在不是在一个* nix盒子上,但是我想你可以做这样的事情,如果你只想要第二行显示:

 grep --after-context=1 'match this here' /my/log/file.log | grep -v '^LOG:' | grep -v '^-' 

这应该打印两行,但第二个grep语句应该隐藏以LOG开头的第一行:

试试看,祝你好运。

目前还不完全清楚你想达到什么目的。 如果你想在这里匹配/然后打印下一行

 sed -n '/match this here/{n;p}' /my/log/file.log DETAIL: parameters: also want to filter this line 

如果您想在此匹配/匹配,然后打印匹配的行和之后的行

 sed -n '/: match this here/{p;n;p}' /my/log/file.log LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line 

用grep你可以

 grep -A 1 'match this here' /my/log/file.log LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line 

如果你有多个比赛,每个比赛是由--

 grep -A 1 'match this here' /my/log/file.log LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line -- LOG: execute <unnamed>: match this here DETAIL: parameters: also want to filter this line 

你可以

 grep -A 1 'match this here' /my/log/file.log | grep -v 'match this here' 

删除第一行,如果这是你想要的。

日志:执行:/匹配在这里/细节:参数:/也想过滤这一行/

STR ='在此匹配'FILE = / var / log / logfile.log

sed“/ $ STR / {n; d;}”$ FILE | sed / $ STR / d