【Linux】bug登记好习惯:发现bug,用命令行截取对应日志

问:

linux日志文件如何截取某个时间片段的日志并保存到新文件中,如截取info-log.0.log日志的【2025-12-24 17:37:29.916】到【2025-12-24 17:37:30.895】之间的日志 保存到info1.log

答:

在 Linux 系统中,截取日志文件指定时间片段的内容并保存到新文件,核心思路是按时间字符串匹配日志行的起始 / 结束范围,常用工具为 sed 或 awk,以下是针对你的需求的具体实现方案:

前提条件

你的日志文件 info-log.0.log 的每一行必须包含完整的时间戳格式(如 2025-12-24 17:37:29.916),且时间戳位于行首或固定位置(这是工具匹配的关键)。

方法 1:使用 sed 命令(推荐,语法简洁)

sed 支持按行匹配范围截取内容,格式为:

复制代码
sed -n '/起始时间戳/,/结束时间戳/p' 源日志文件 > 目标文件

针对你的需求,执行命令:

bash 复制代码
sed -n '/2025-12-24 17:37:29.916/,/2025-12-24 17:37:30.895/p' info-log.0.log > info1.log
bash 复制代码
参数说明
-n:静默模式,只输出匹配的行,避免无关内容。
/时间戳1/,/时间戳2/p:匹配包含时间戳 1 的行到包含时间戳 2 的行的所有内容,并打印(p 表示打印)。
>:将结果重定向到 info1.log 文件。

方法 2:使用 awk 命令(更灵活,适合复杂匹配)

如果日志的时间戳不在行首,或需要更精准的时间比较,可以用 awk 实现:

bash 复制代码
awk '/2025-12-24 17:37:29.916/,/2025-12-24 17:37:30.895/' info-log.0.log > info1.log

进阶场景:时间戳在行中间

如果时间戳在行的固定位置(比如第 3 列),可以指定字段匹配:

bash 复制代码
awk '$3 >= "2025-12-24 17:37:29.916" && $3 <= "2025-12-24 17:37:30.895"' info-log.0.log > info1.log

($3 表示第 3 列,需根据实际日志格式调整)

注意事项

时间戳精确匹配

确保命令中的时间戳和日志中的完全一致(包括空格、小数点、毫秒数),否则会匹配失败。

如果日志中毫秒数是 3 位(如 916),不要写成 2 位(如 91)。

多行日志的问题

如果某条日志内容跨多行(时间戳只在第一行),sed/awk 会只截取到时间戳所在的行,这种情况需要结合日志格式做特殊处理。

大日志文件优化

对于 GB 级别的大日志,可先用 grep 定位时间戳的大致行号,再用 sed 按行号截取,提升效率:

bash 复制代码
# 查找起始时间戳的行号
grep -n "2025-12-24 17:37:29.916" info-log.0.log
# 查找结束时间戳的行号
grep -n "2025-12-24 17:37:30.895" info-log.0.log
# 按行号截取(假设行号是 100 到 200)
sed -n '100,200p' info-log.0.log > info1.log

验证结果

执行命令后,可通过以下命令检查目标文件是否正确:

bash 复制代码
cat info1.log
# 或查看文件行数
wc -l info1.log
相关推荐
拾光Ծ9 小时前
【Linux】文件系统核心(二):深入 Ext2 底层:Block Group 结构 + inode 索引,轻松锁定文件的增删改查
linux·软硬链接·inode·ext2文件系统·block group·文件系统原理·linux面试
楼田莉子9 小时前
Linux学习:进程信号
linux·运维·服务器·c++·学习
KeeBoom9 小时前
嵌入式 Linux 应用开发完全手册——阅读笔记14
linux·笔记
进击切图仔9 小时前
新装 Ubuntu 20.04.6 中安装 ssh.server 功能
linux·ubuntu·ssh
松涛和鸣9 小时前
69、Linux字符设备驱动实战
linux·服务器·网络·arm开发·数据库·驱动开发
TangDuoduo00059 小时前
【Linux下LED基础设备驱动】
linux·驱动开发
cyber_两只龙宝9 小时前
haproxy--使用socat工具实现对haproxy权重配置的热更新
linux·运维·负载均衡·haproxy·socat
٩( 'ω' )و2609 小时前
linux网络--基础概念
linux·网络
zhang6183999 小时前
Linux中不同服务器之间迁移python 虚拟环境-conda-pack
linux·运维·python
HIT_Weston10 小时前
121、【Ubuntu】【Hugo】首页板块配置:list 模板(一)
linux·ubuntu·list