Linux下快速提取指定时间段日志的三种方法

 更新时间:2025年12月10日 08:27:22   作者:天天进步2015  
这篇文章主要为大家详细介绍了Linux下快速提取指定时间段日志的三种方法,本文重点比较了这三种方案的优缺点,感兴趣的小伙伴可以跟随小编一起学习一下

前言

做后端开发或运维的同学,一定都经历过这样的场景:

线上服务出了 Bug,老板让你查一下今天上午 10:00 到 11:00 到底发生了什么。你登录服务器一看,app.log 已经跑到了 10GB

这时候如果你直接 vim 打开,服务器可能会卡死;如果你用 cattail 慢慢翻,眼睛都要看瞎。

其实,在 CentOS(以及绝大多数 Linux 发行版)下,我们完全不需要写复杂的脚本,只需要一行命令,就能把指定时间段的日志另存为一个新的文件。

今天就分享三种最常用的姿势,由浅入深,总有一款适合你。

准备工作

假设我们的日志文件名为 app.log,格式如下(标准的日期开头):

2023-10-27 10:00:01 [INFO] User login success
2023-10-27 10:00:05 [WARN] Database query slow
...

我们的目标是:将 10:00 到 11:00 的日志,另存为 bug_report.log

姿势一:sed —— 简单粗暴(推荐日志连续的情况)

sed 是流编辑器,它非常适合处理这种“从 A 开始,到 B 结束”的任务。

命令模板:

sed -n '/开始时间/,/结束时间/p' 原日志 > 新日志

实战操作:

sed -n '/2023-10-27 10:00:00/,/2023-10-27 11:00:00/p' app.log > bug_report.log

优点:

  • 命令简单,好记。
  • 处理速度极快。

缺点(非常重要):

sed 是完全匹配字符串。如果你的日志里正好没有 10:00:00 这一秒的记录(比如那一秒没人访问),sed 就会找不到开始标记,导致截取失败。

姿势二:awk —— 精准打击(最稳健的方案)

如果你担心日志中间有断档(比如某一秒没有日志),awk 是最佳选择。它不看字符串是否相等,而是把时间当做字符进行比较(大于/小于)

只要日志行首是时间,它就能精确捕捉范围。

命令模板:

awk '$0 >= "开始时间" && $0 <= "结束时间"' 原日志 > 新日志

(注:$0 代表整行内容,如果只需要比较第2列时间,可以用 $2)

实战操作:

awk '$0 >= "2023-10-27 10:00:00" && $0 <= "2023-10-27 11:00:00"' app.log > bug_report.log

优点:

  • 容错率高:即使日志里没有 10:00:00 这一行,它也会从 10:00:01 开始截取。
  • 逻辑清晰,支持复杂的过滤条件。

姿势三:grep —— 模糊搜索(适合“按小时”抓取)

如果你不需要精确到秒,只是想把“10 点这一小时”的所有日志都拉出来看看,grep 是最快的。

命令模板:

grep "^时间前缀" 原日志 > 新日志

实战操作(抓取 10 点段所有日志):

grep "^2023-10-27 10:" app.log > 10_am_logs.log

优点:

  • 几乎没有心智负担,最常用的命令。
  • 适合快速排查故障范围。

总结与建议

方案命令关键字适用场景稳健性
方案一sed确定起始时间点一定存在时⭐⭐⭐
方案二awk生产环境首选,时间点可能不连续⭐⭐⭐⭐⭐
方案三grep只需要按小时/按分钟模糊查询⭐⭐⭐⭐

建议:

如果你在写自动化脚本来备份日志,请务必使用 方案二 (awk),因为它不会因为某一秒日志的缺失而导致脚本失效。

到此这篇关于Linux下快速提取指定时间段日志的三种方法的文章就介绍到这了,更多相关Linux提取指定时间段日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Linux下修改/设置环境变量JAVA_HOME的方法

    浅谈Linux下修改/设置环境变量JAVA_HOME的方法

    这篇文章主要介绍了浅谈Linux下修改/设置环境变量JAVA_HOME的方法,环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。感兴趣的可以了解一下
    2020-07-07
  • Linux新磁盘到扩容到已有目录方式

    Linux新磁盘到扩容到已有目录方式

    文章详细描述了一个服务器磁盘挂载和扩容的过程,包括添加磁盘、查看挂载情况、创建分区、格式化分区、扩展卷组和逻辑卷,并最终同步文件系统
    2026-03-03
  • Ubuntu安装jenkins完成自动化构建过程

    Ubuntu安装jenkins完成自动化构建过程

    本文介绍了在Ubuntu系统上安装和配置Jenkins,并实现自动化构建和部署的流程,主要步骤包括安装必要的软件(如JDK、Maven、Git、Docker等),配置Jenkins,创建Maven项目任务,编写Shell脚本进行构建和部署,以及测试新部署的接口
    2025-12-12
  • 如何禁止网站内容被搜索引擎收录的几种方法讲解

    如何禁止网站内容被搜索引擎收录的几种方法讲解

    今天小编就为大家分享一篇关于如何禁止网站内容被搜索引擎收录的几种方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Centos8搭建配置nis域服务详细步骤

    Centos8搭建配置nis域服务详细步骤

    大家好,本篇文章主要讲的是Centos8搭建配置nis域服务详细步骤,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • linux中通过文件描述符获取文件绝对路径的方法

    linux中通过文件描述符获取文件绝对路径的方法

    下面小编就为大家带来一篇linux中通过文件描述符获取文件绝对路径的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Linux centos如何让普通用户获取root权限

    Linux centos如何让普通用户获取root权限

    这篇文章主要介绍了Linux centos如何让普通用户获取root权限问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 浅谈Linux的库文件

    浅谈Linux的库文件

    这篇文章主要介绍了Linux的库文件的相关内容,小编觉得很不错,在这里分享给大家。希望给大家一个参考。
    2017-10-10
  • 有关Ubuntu在关盖休眠后可行的拯救方法

    有关Ubuntu在关盖休眠后可行的拯救方法

    这篇文章主要介绍了有关Ubuntu在关盖休眠后可行的拯救方法的相关资料,需要的朋友可以参考下
    2026-02-02
  • CentOS环境下安装Redis3.0及phpredis扩展测试示例

    CentOS环境下安装Redis3.0及phpredis扩展测试示例

    这篇文章主要介绍了CentOS环境下安装Redis3.0及phpredis扩展测试,结合实例形式分析了CentOS下Redis安装相关步骤、命令及phpredis扩展的测试代码,需要的朋友可以参考下
    2018-04-04

最新评论