在日志文件中查找日期

在日志文件中查找日期

我想在日志文件中查找一个日期并从该日期打印到日志文件的末尾,该日期是日志文件末尾的 5 天前,即 2002 年 12 月 27 日

日志文件如下:213.64.56.208 - - [01/Jan/2003:05:42:53 +0100]

整个脚本:

for d in \
 $(sed -nre 's/.*\[(..)\/(...)\/(....):(..:..:..) .*/\1 \2 \3 \4/p' thttpd.log $
do echo $d >s1; done

time=$(expr 60 \* 60 \* 24 \* 5)
EDATE=`tail -1 s1`
SDATE=$[$EDATE - $time]
sd=`date -d '1970-01-01 UTC '$SDATE' seconds' +"%d/%b/%Y"`
sd=$(echo $sd | sed 's/\//\\\//g')
sed -n "$(awk '/'$sd'/ { print NR }' thttpd.log | head -1),$ p" thttpd.log

问题是日志文件中没有日期 2002 年 12 月 27 日!那么现在我应该如何输入才能搜索第二天(2002 年 12 月 28 日)

213.64.237.213 - - [23/Dec/2002:03:02:22 +0100]
213.132.36.66 - - [28/Dec/2002:19:33:29 +0100]

我也遇到了这个问题!我想打印过去 5 小时,即 07:55:21,但日志文件中没有 7:55 !所以它应该从下一个项目开始打印直到 (08:08) 结束

213.64.56.208 - - [01/Jan/2003:07:53:17 +0100]
213.64.56.208 - - [01/Jan/2003:08:08:19 +0100]

答案1

你还没解决这个问题吗?

您必须$sd用单引号括起来,并用反斜杠转义日期中的斜杠,请尝试以下操作:

sd="01/Jan/2003"
sd=$(echo $sd | sed 's/\//\\\//g')
sed -n "$(awk '/'$sd'/ { print NR }' aa.log | head -1),$ p" aa.log

PS:如有必要,请将月份名称转换为数字。

相关内容