从具有搜索字符串的日志文件中获取最近5分钟的日志

时间:2020-04-29 07:29:59

标签: bash shell date

我们有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.

任何解决方案?

1 个答案:

答案 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