shell脚本尾部日志文件并将其输出到另一个文件直到找到特定字符串?

shell脚本尾部日志文件并将其输出到另一个文件直到找到特定字符串?

我必须使用 tail 将日志文件的输出写入另一个文件,直到找到 string 。

日志文件包含-

  I am Rahul.
  I have 5 oranges.
  The end.
  Something something.

直到“最后”,我希望将所有内容写入另一个文件。

tail -f var/log/output.log 
| grep -m 1 "The end" | tee 
Abc.txt 

但 abc.txt 文件中只写了“结束”。

答案1

tail -f file | sed '/The end/q' | tee outfile

Sed 打印所有行,直到显示“The end”,此时它退出。

也是最近在 AskUbuntu 中询问

答案2

grep此处无法使用,因为grep用于从流或文件中提取与某些模式匹配的行,在这种情况下您想要停止当找到特定字符串时输出。本质上,您必须提供grep一些与该行之前的所有行相匹配的模式The end.,并且该行之后不匹配任何行。


sed '/The end\./q'

The end.此命令将从其标准输入流输出每一行,直到看到包含该字符串的行。此时,将输出最后一行,并且该sed命令将由于执行脚本q中的命令而终止sed

作为管道的一部分:

tail -f var/log/output.log |
sed '/The end\./q' |
tee Abc.txt 

根据命令的实现tail,一旦The end.遇到该行,或者一旦tail -f尝试写入不存在的sed进程,即一旦该The end.行被看到sed并且该Something something.行被输出,该管道就会终止tail -f

tail在 OpenBSD(其行为不像 POSIX tail)上表现出最后描述的行为,而 GNUtail会给出第一个行为(一旦The end.遇到该行立即终止)。

相关内容