Shell 两个日期之间的日志

Shell 两个日期之间的日志,shell,unix,logging,Shell,Unix,Logging,我正试图从一个大的圆木工厂取回两个特定日期之间的圆木 我的日志格式是 [EFMS] DEBUG [07 Apr 2014 11:07:35,225] EfmsWebSubjectFactory.createSubject(71) | HTTP Session id: B37D367C02B5411489152F5EF4D740B3 [EFMS] DEBUG [07 Apr 2014 11:07:35,226] EfmsWebSubjectFactory.createSubject(79)

我正试图从一个大的圆木工厂取回两个特定日期之间的圆木

我的日志格式是

[EFMS]  DEBUG [07 Apr 2014 11:07:35,225]  EfmsWebSubjectFactory.createSubject(71) | HTTP Session id: B37D367C02B5411489152F5EF4D740B3
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFactory.createSubject(79) | Subject Context is associated to principal: None
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFactory.createSubject(85) | Created new subject instance for user null
[EFMS]  DEBUG [07 Apr 2014 11:07:35,228]  LoginController.login(53) | Login page requested
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFactory.createSubject(71) | HTTP Session id: B37D367C02B5411489152F5EF4D740B3
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFactory.createSubject(79) | Subject Context is associated to principal: None
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFactory.createSubject(85) | Created new subject instance for user null
我正以这种方式努力

sed-n'/[EFMS]调试[2014年4月6日00:00:00/,/[EFMS]调试[2014年4月7日00:00:00/p'catalina.logs


它不起作用,你能帮我一下吗。

如果不将时间戳转换为历元秒并找到一个范围,就很难解析时间戳。如果你只是查找全天时间,你可以:

sed -n '/06 Apr 2014/,/07 Apr 2014/p' catalina.logs

您需要转义元字符,如
[
]
。如果日志中不存在整个时间戳,则可能无法放置它们。

如果不将时间戳转换为历元秒并找到一个范围,将无法轻松解析时间戳。如果您只是查找全天时间,则可以执行以下操作:

sed -n '/06 Apr 2014/,/07 Apr 2014/p' catalina.logs

您需要转义元字符,如
[
]
。如果日志中不存在整个时间戳,则可能无法放置它们。

您不需要
sed
,您需要
grep
。此外,您的查询过于复杂,如果您需要发生在6号的事件,您只能搜索6号:

grep "06 Apr 2014" catalina.logs
如果需要指定更大的天数,可以使用正则表达式,例如:

grep "[1-3][0-9] Mar 2014" catalina.logs

将从3月份开始搜索所有条目。

您不需要
sed
,您需要
grep
。此外,您的查询过于复杂,如果您需要发生在6日的事件,您只能搜索6日:

grep "06 Apr 2014" catalina.logs
如果需要指定更大的天数,可以使用正则表达式,例如:

grep "[1-3][0-9] Mar 2014" catalina.logs

将搜索3月份的所有条目。

如果您想要任意日期范围,可以使用以下
awk
脚本执行此操作:

{
    mm = (index ("JanFebMarAprMayJunJulAugSepOctNovDec", $4) + 2) / 3;
    if (mm < 10) { mm = "0"mm; };

    dd = $3;
    gsub (/\[/, "", dd);

    date = $5"-"mm"-"dd;

    if ((date >= from) && (date <= to)) { print; };
}

如果需要任意日期范围,可以使用以下
awk
脚本:

{
    mm = (index ("JanFebMarAprMayJunJulAugSepOctNovDec", $4) + 2) / 3;
    if (mm < 10) { mm = "0"mm; };

    dd = $3;
    gsub (/\[/, "", dd);

    date = $5"-"mm"-"dd;

    if ((date >= from) && (date <= to)) { print; };
}

抱歉,收回,我的错。抱歉,收回,我的错。**这暂时解决了我的问题**谢谢托马斯**这暂时解决了我的问题**谢谢托马斯__