是否可以在连续流上使用grep?

我的意思是有点像tail-f<file>命令,但输出上有grep,以便只保留我感兴趣的行。

我尝试过tail-f<file>|grep模式,但似乎只有在tail完成后才能执行grep,也就是说永远不会执行。


当前回答

是的,这实际上会很好。Grep和大多数Unix命令一次只能对一行流进行操作。每一条从尾部出来的线都会被分析,如果匹配的话就会被传递。

其他回答

是的,这实际上会很好。Grep和大多数Unix命令一次只能对一行流进行操作。每一条从尾部出来的线都会被分析,如果匹配的话就会被传递。

我一直使用tail-f<file>|grep<pattern>。

它会等到grep刷新,而不是等到它完成(我使用的是Ubuntu)。

这条命令对我有效(Suse):

mail-srv:/var/log # tail -f /var/log/mail.info |grep --line-buffered LOGIN  >> logins_to_mail

收集邮件服务的登录信息

没有看到任何人为我提供了通常的帮助:

less +F <file>
ctrl + c
/<search term>
<enter>
shift + f

我更喜欢这样,因为您可以随时使用ctrl+c停止并浏览文件,然后只需按shift+f返回实时流式搜索。

sed将是更好的选择(流编辑器)

tail-n0-f<file>| sed-n‘/search string/p‘

然后,如果您希望在找到特定字符串后退出tail命令:

tail--pid=$(($BASHPID+1))-n0-f<file>|sed-n'/search string/{p;q}'

显然是一种抨击:$BASHPID将是tail命令的进程id。sed命令在管道中位于tail之后,因此sed进程id将为$BASHPID+1。