我需要找到一种grep
在匹配后返回不同行大小的内容的方法。有些比赛后面有 4 行,其他有 20 行。我需要它们。
每小时我都希望返回前一小时的日志条目,其时间戳如下:
time: 20200115132443
为此,我想每隔一小时,一个 cronjob 都会将前一小时的时间戳作为 grep 语句运行:
grep "time: 2020011507"
我遇到的问题是比赛后某些条目的日志大小不同,所以像这样的事情grep -C 5
不会一直有效。
我想知道我是否应该将匹配的所有内容返回到下一个匹配的 grep 语句(这将错过最后一个条目),或者是否有其他方式来运行它。示例日志文件片段如下所示:
time: 20200115132443
logging stuffs
time: 20200115134543
more logging
stuffs
like this
time: 20200115140201 # this should now not be returned
也许我过于复杂,可以只运行grep
当前小时的语句,然后在该小时之前和前一小时之后获取所有内容。
可能的方法:
现在试图使它成为一个紧凑的单班轮:
您可以将输出重定向到临时文件并使用它。
或者你可以简单地在一个衬里的末端添加一个管道和 grep:
.
PS根据操作系统,命令日期格式可能会有所不同。
我们在这里使用的 Linux:date -d '1 hour ago' +%Y%m%d%H
Linux 我们可以使用:date -d @$(($(date +%s)-3600)) +%Y%m%d%H
MacOS X:日期 -r $(($(日期 +%s)-3600)) +%Y%m%d%H
等等
更新:发现删除最后找到的行的 sed 部分 '$d' 不起作用,因此更新了 sed 行以正常工作。