【问题标题】:grep current date to 7 days back without specific dategrep 当前日期到 7 天前没有具体日期
【发布时间】:2018-10-25 03:04:59
【问题描述】:

在我的日志中,日期以May 01 11:01:30 2018 的形式保存。在grep 我不能给出具体的日期,例如grep "May 0[1-8]"

如何执行grep 或其他搜索命令来搜索从当前日期起 7 天前的日志?

示例:当前日期 - 7 天前

如果有可能?还是简单的脚本?

最好的问候!

【问题讨论】:

标签: linux grep


【解决方案1】:

根据您尝试实现的进一步目标、日志类型和复杂性,可能需要编写一个小脚本。

您可以查看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 框架的应用程序,我有特定的脚本来处理它们的日志文件。

【讨论】:

    【解决方案2】:

    我会这样做:grep -A 100000 "$(date +'%b %d' -d '-7 days')" myservice.log

    如果您需要更多行,您可以在其中插入大于 1000000 的内容。

    日期命令参数+'%b %d' 为您提供所需的格式,参数-d '-7 days' 为您提供7 天前的日期。 grep -A 然后为您提供文件中最后一个匹配项之后的第一个匹配项和 100000 行。

    【讨论】:

    • 好消息@exic。对于我的一些 Hadoop 框架日志可能不可行,但对于很多其他日志。
    猜你喜欢
    • 2023-02-23
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2021-11-09
    相关资源
    最近更新 更多