【发布时间】:2018-10-25 03:04:59
【问题描述】:
在我的日志中,日期以May 01 11:01:30 2018 的形式保存。在grep 我不能给出具体的日期,例如grep "May 0[1-8]"。
如何执行grep 或其他搜索命令来搜索从当前日期起 7 天前的日志?
示例:当前日期 - 7 天前
如果有可能?还是简单的脚本?
最好的问候!
【问题讨论】:
在我的日志中,日期以May 01 11:01:30 2018 的形式保存。在grep 我不能给出具体的日期,例如grep "May 0[1-8]"。
如何执行grep 或其他搜索命令来搜索从当前日期起 7 天前的日志?
示例:当前日期 - 7 天前
如果有可能?还是简单的脚本?
最好的问候!
【问题讨论】:
根据您尝试实现的进一步目标、日志类型和复杂性,可能需要编写一个小脚本。
您可以查看How to get all the log lines between two dates ranges in Linux。为了快速参考,我也会在这里提供我的答案:
我经常用于 Java 应用程序日志文件的另一种方法是查找时间戳第一次出现的行号
FROM_DATE="Wed 21 Mar 14:52:08"
TO_DATE=""Wed 21 Mar 14:53:08"
FROM_LINE=$(grep -n -m 1 ${FROM_DATE} ${FILE} | cut -d ":" -f 1)
TO_LINE=$(grep -n -m 1 ${TO_DATE} ${FILE} | cut -d ":" -f 1)
然后给出之间的信息,即
tail -n "${FROM_LINE}" ${FILE} | head -n $(expr $TO_LINE - $FROM_LINE)
或通过
sed -n -e "${FROM_LINE},${TO_LINE} p" -e "${TO_LINE} q" ${FILE}
这将赶上堆栈跟踪、REST API 内容、JSON 结构等。
对于某些应用程序,例如来自 Hadoop 框架的应用程序,我有特定的脚本来处理它们的日志文件。
【讨论】:
我会这样做:grep -A 100000 "$(date +'%b %d' -d '-7 days')" myservice.log
如果您需要更多行,您可以在其中插入大于 1000000 的内容。
日期命令参数+'%b %d' 为您提供所需的格式,参数-d '-7 days' 为您提供7 天前的日期。 grep -A 然后为您提供文件中最后一个匹配项之后的第一个匹配项和 100000 行。
【讨论】: