我想在系统日志中搜索大于特定搜索模式的日期。例如,我想查找日期大于的每个 syslog 条目JAN 6 16:24:00
。我知道我可以使用 sed ( sed -n '/JAN 6 16:24:00/,$p' ${LOGFILE}
) 但这仅在sed
存在具有我指定的确切日期的条目时才有效 - 如果日志文件中没有包含完全的条目JAN 6 16:24:00
,我将不会得到任何输出,因为没有真正的逻辑,只有字符串被比较。
我知道,journalctl --since "XXX"
但这可能在不基于 SystemD 的主机上运行,但基本上我需要这个功能。
有没有办法使用“经典”GNU 工具打印日志文件中比X
假设日志文件不包含的日期更新的所有条目?X
如果您的日志被格式化为更有用的格式,例如:
你可以这样做:
但在这里,它更复杂,因为这些日期是使用英文月份名称缩写格式化的,甚至没有指定年份。
最好的方法是使用一个日期解析器,它可以理解时间戳格式并将无年时间戳理解为过去最近发生的时间戳,比如
Date::Parse
perl 模块:对于没有年份的日期,
Date::Parse
'sstr2time
似乎给出过去的日期,除非日期来自当前月份。例如,如果在 2022 年 1 月 15 日运行,“Feb 2”将被解释为 2021-02-02,而“Jan 31”将被解释为 2022-01-31。