前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[SHELL] 获取某段时间的日志

[SHELL] 获取某段时间的日志

原创
作者头像
大大刺猬
发布2022-11-16 13:30:56
2.3K0
发布2022-11-16 13:30:56
举报
文章被收录于专栏:大大刺猬

需求

其实这个需求并不常见, 有的时候需要截取部分日志, 一般使用tail即可.

但有时候, 需要取某个时间之后的日志给其他人(比如原厂商)分析, 这种时候往往只需要问题发生的时候的日志即可.

实现方式

主要就是使用 grep, sed, awk, tail之类的常用命令.

下面的演示就使用Mysql的日志了.

建议重定向到其它文件. 本文为了方便演示就不重定向了.

方法1 grep

-A, --after-context=NUM print NUM lines of trailing context

-B, --before-context=NUM print NUM lines of leading context

例子:

-A 10 是打印匹配行及其之后的10行

代码语言:javascript
复制
grep '^2022-11-14T09' -A 10 /data/mysql_3308/mysqllog/dblogs/mysql3308.err

可以使用 | grep -B 'xxx' 这样就能获取某段时间的了, 这里就不演示了

方法2 sed

代码语言:javascript
复制
eval sed -n '/^2022-11-14T09/,\$p' /data/mysql_3308/mysqllog/dblogs/mysql3308.err

sed 并不常用, 一般用sed来操作文件内容..... 就不多介绍了.

方法3 awk

使用 if 判断时间是否符合要求, 并打印符合要求的行

~ 是 like 操作符

$0 表示整行

代码语言:javascript
复制
awk '{if ($1 ~ "2022-11-14") print $0}' /data/mysql_3308/mysqllog/dblogs/mysql3308.err

当然你可以再加个条件 比如 $3=="[ERROR]"

代码语言:javascript
复制
awk '{if (($1 ~ "2022-11-14") && ($3=="[ERROR]")) print $0}' /data/mysql_3308/mysqllog/dblogs/mysql3308.err

方法4 tail

tail就比较好理解了, 就是查看最后N行. 搭配grep使用效果更佳

grep匹配出起始行, tail 从起始行开始打印

grep -m 1 是只打印第一次匹配的内容.

tail -n +110440 意思是从 110440 行开始打印

代码语言:javascript
复制
grep -m 1 -n '^2022-11-14' /data/mysql_3308/mysqllog/dblogs/mysql3308.err
tail -n +110440 /data/mysql_3308/mysqllog/dblogs/mysql3308.err

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
  • 实现方式
    • 方法1 grep
      • 方法2 sed
        • 方法3 awk
          • 方法4 tail
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档