【Linux 运维】告别 cat:如何按“时间段”优雅地截取日志文件?

前言

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

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

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

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

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


准备工作

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

Plaintext

复制代码
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 结束"的任务。

命令模板:

Bash

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

实战操作:

Bash

复制代码
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 是最佳选择。它不看字符串是否相等,而是把时间当做字符进行比较(大于/小于)

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

命令模板:

Bash

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

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

实战操作:

Bash

复制代码
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 是最快的。

命令模板:

Bash

复制代码
grep "^时间前缀" 原日志 > 新日志

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

Bash

复制代码
grep "^2023-10-27 10:" app.log > 10_am_logs.log

✅ 优点:

  • 几乎没有心智负担,最常用的命令。

  • 适合快速排查故障范围。


总结与建议

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

老司机建议:

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


希望这篇小技巧能帮你从海量日志中从容脱身!

相关推荐
大树883 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz4 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工4 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩5 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_5 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化