我们有2种不同的日志文件格式,
1.
Some strings : 20200429 064351 Name : server Error
2.
ERROR Error Message
TIME Wed Apr 29 11:36:39 2020
Release 123
我尝试使用以下命令从日志文件中自动获取最近5分钟的日志内容。
sed -n "/ $(date +\%R -d "-5 min")/,$"p logfile.log | grep "ERROR"
但是没有用。
同一命令尝试了不同的日志文件,并且可以正常工作。 工作日志文件格式
29.04.2020 00:00:08 some string.
任何解决方案?
答案 0 :(得分:1)
您的脚本中存在三个问题:
a)sed
在您调用时将打印所有输入行至少一次,最后一行打印两次;您可以通过执行sed -e "/$pattern/,\$p" -e "d" logfile.log
,在文件名前的选项末尾添加参数-e d
来解决此问题;
b)使用%R
选项返回的时间包含:
,它们不显示在日志文件中;您可以使用日期格式+'%Y%M%d %H%M'
;
c)您要查找的字符串是Error
,但是您将ERROR
作为grep
的参数,由于grep
参数区分大小写,因此该字符串不起作用默认情况下。
尝试:
pattern=$(date +'%Y%M%d %H%M' -d '-5 minutes')
sed -e "/: \*\*$pattern/,\$p" -e "d" logfile.log | grep "Error"
但是发布sed
中的所有内容而不使用grep
会更简单:
pattern=$(date +'%Y%M%d %H%M' -d '-5 minutes')
sed -e "/: \*\*$pattern/,\${/Error/p}" -e "d" logfile.log