模式搜索并显示最后出现的模式?

模式搜索并显示最后出现的模式?

我有一个日志文件包含启动关闭每天的次数。

我想查看启动和关闭的最后一个模式(位于每天更新的文件的末尾)。

另外,我不需要启动和关闭之间的所有行。我只想要上次启动后的几行(假设为 3 行)和上次关闭后的几行(假设为 3 行)。

对于单线有什么建议吗?

答案1

如果您不介意将日志文件的(提取的)行反转两次,则可以使用sed和的组合(请参阅grep如何反转文件中的行?)。

# test case
echo '
startup 1
shutdown 1
startup 2
shutdown 2
startup 3
line 1
line 2
line 3
line 4
line 5
shutdown 3
line 1
line 2
line 3
line 4
line 5
' | 
tail -r | sed -n -e '1,/startup/p' | tail -r | grep -E -A 3 '(startup|shutdown)'


# output
startup 3
line 1
line 2
line 3
--
shutdown 3
line 1
line 2
line 3

答案2

尝试使用 grep 代替 sed wit 选项“--after-context”。

例子:

cat logfile | grep --after-context=3 startup

相关内容