在我的日志中,日期以May 01 11:01:30 2018
的形式保存。在grep
我无法提供具体日期,例如grep "May 0[1-8]"
。
如何执行grep
或其他搜索命令,从当前日期开始搜索日志7天?
示例:当前日期 - 返回7天
如果有可能吗?还是简单的脚本?
祝你好运!
答案 0 :(得分:0)
根据您尝试实现的进一步目标,日志类型和复杂性,可能需要编写一个小脚本。
您可以查看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框架,我有特定的脚本来处理他们的日志文件。
答案 1 :(得分:0)
我做这样的事情:grep -A 100000 "$(date +'%b %d' -d '-7 days')" myservice.log
如果您需要更多行,可以插入大于1000000
的内容。
日期命令参数+'%b %d'
为您提供所需的格式,参数-d '-7 days'
为您提供7天前的日期。 grep -A
然后会在您的文件的最后一场比赛后为您提供第一个匹配和100000
行。