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

标签 linux command-line sed

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

path to file executing query
QUERY
SIZE: ...
ROWS: ...
MSG: ...
DURATION: ...

我想打印所有这些东西,但前提是 MSG: 包含一些有趣的东西(错误消息)。我现在得到的只是 sed -n '/^path to file/,/^DURATION/' 我不知道从这里到哪里去。

注意:查询通常是多行的,所以遗憾的是使用 grep 的 -B 并不总是有效(这是我到目前为止一直在做的,只是慷慨地使用 -B 值)

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

谢谢!

最佳答案

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

sed -n '/^MSG.*ERROR/{H;g;N;p;};/^DURATION/{s/.*//;h;d;};H' < logname

(我希望有一种更简洁的方法来清理存放空间。有人吗?...)

关于linux - 当模式在范围内时使用 sed 打印范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341158/

相关文章:

linux - cSipSimple 应用程序错误 :- 'SL_ANDROID_STREAM_VOICE' undeclared (first use in this function)

php - 文件存在,但我无法使用 php 打开它

windows-7 - 命令行语法可防止在 PowerShell 输出文件中换行?

linux - 如何将具有制表符分隔值的大文件拆分为较小的文件,同时根据第一个值将行保留在单个文件中?

linux - 如何使用 shell 脚本在特定行的文件中写入 xml 标记

c - 如何在终止线程之前将线程数据复制到数组?

python - 如何使用 python 或 CL 将文件复制到剪贴板,稍后使用 STRG+V 粘贴它?

windows - FFMPEG管道从Windows上的命令行输入文件名

linux - 用反斜杠替换字符串

ubuntu - 在匹配行的最后一次出现后追加文本