问题描述
我正在尝试获取日志文件的最后几行,我环顾四周,发现 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) 仅替换第二部分的行并打印结果。