执行 tail -f 直到找到模式 BACKWARDS

问题描述

我正在尝试获取日志文件的最后几行,我环顾四周,发现 tail -f /path/to/file.log | sed '/^MYSTRING/ q' 是一种常用的方式! 但是这个获取数据直到它发现它匹配,而不是向后。

让我解释一下;

日志文件:(只是示例,不是实际日志;)

Donald
Duck
Cat
Dog
MYSTRING
animal
fish
ape

上面的代码输出

Donald
Duck
Cat
Dog
MYSTRING

但我想要最后一个 MYSTRING 之后的日志文件中的最后一个(是的,可能有一些我在那里,这就是为什么我需要向后这样做),

animal
fish
ape

解决方法

在我看来,您根本不希望日志文件增长,因此 tail -f 对您不起作用。如果是这样,您可以这样做:

[bash] # cat file
Donald
Duck
Cat
Dog
MYSTRING
animal
fish
ape
[bash] # awk 'flag { print } /MYSTRING/ { flag++ }' file
animal
fish
ape
[bash] #
,

这可以通过 sed 实现:

sed -zrn 's/(^.*MYSTRING\n)(.*$)/\2/p' file

将文件作为单行使用 (-z) 并使用正则表达式拆分三个部分 (-r) 仅替换第二部分的行并打印结果。