当模式在范围内时,使用 sed 打印范围?

cod*_*ala 5 linux command-line sed

我有一个充满查询的日志文件,我只想查看有错误的查询。日志条目类似于:

path to file executing query
QUERY
SIZE: ...
ROWS: ...
MSG: ...
DURATION: ...
Run Code Online (Sandbox Code Playgroud)

我想打印所有这些东西,但只有在MSG:包含感兴趣的东西时(错误消息)。我现在所拥有的只是sed -n '/^path to file/,/^DURATION/',我不知道从哪里开始。

注意:查询通常是多行的,所以-B很遗憾地使用 grep并不能一直工作(这是我迄今为止一直在做的事情,只是对-B价值大方)

不知何故,我只想使用sed,但如果我绝对必须使用其他类似的东西,awk我想那很好。

谢谢!

Bet*_*eta 5

您还没有说明错误消息是什么样的,所以我假设它包含“错误”一词:

sed -n '/^MSG.*ERROR/{H;g;N;p;};/^DURATION/{s/.*//;h;d;};H' < logname
Run Code Online (Sandbox Code Playgroud)

(我希望有一种更整洁的方式来清理货舱空间。有人吗?...)