我有一个日志文件
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 可以做到这一点吗?
据我了解,AWK 可以用于此目的。另外,Stack Overflow 上已经有一个答案,看起来正是您想要的?
https://unix.stackexchange.com/questions/123979/how-to-extract-logs- Between-two-time-stamps
如果有人想获取特定时间范围内的日志,也许你想获取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"
(您可以根据您的时间戳替换时间范围)