如何grep两个时间范围之间的日志

问题描述 投票:0回答:2

我有一个日志文件

abc.log
,当我对其执行
vi
时,其中的内容是这样的。

2015-05-28 18:12:00,815 INFO 0x7f6ed23e3700 send_to - recent: 1432861920 from dc:2 client_id: 102
2015-05-28 18:13:01,024 INFO 0x7f6ed23e3700 send_to - recent: 1432861980 from dc:2 client_id: 101
2015-05-28 18:13:42,244 WARN 0x7f6ed26e6700 mgr - Failed to upsert data for userid 3589109212161 with value cat and status -2
2015-05-28 18:14:00,135 INFO 0x7f6ed23e3700 send_to - recent: 1432862040 from dc:2 client_id: 103

我想查看该时间范围内的所有日志:

2015-05-28 00:30:00 - 2015-05-28 02:30:00

所以基本上无论我在这些时间范围内有什么日志,我都希望以与已经存在的顺序相同的顺序查看它。使用 grep 可以做到这一点吗?

linux unix ubuntu grep find
2个回答
3
投票

据我了解,AWK 可以用于此目的。另外,Stack Overflow 上已经有一个答案,看起来正是您想要的?

https://unix.stackexchange.com/questions/123979/how-to-extract-logs- Between-two-time-stamps


0
投票

如果有人想获取特定时间范围内的日志,也许你想获取5分钟内的日志,你可以像下面这样做

对于动态时间范围(例如,您不知道时间范围,但需要最近 5 分钟之间的日志)

#!/bin/bash
LOG_FILE="./modsec.txt"
SEARCH_WORD="ModSecurity: Access denied"
START_TIME=$(date -d "5 minutes ago" "+%H:%M")
END_TIME=$(date "+%H:%M")

# using sed
sed -n "/"$START_TIME"/,/"$CURRENT_TIME"/p" "$LOG_FILE" | grep -w "$SEARCH_WORD"

对于静态时间范围(你知道时间范围)

sed -n "/hh:mm/,/hh:mm/p" "$LOG_FILE" | grep -w "$SEARCH_WORD"
(您可以根据您的时间戳替换时间范围)

© www.soinside.com 2019 - 2024. All rights reserved.