是否可以在连续流上使用grep?
我的意思是有点像tail-f<file>命令,但输出上有grep,以便只保留我感兴趣的行。
我尝试过tail-f<file>|grep模式,但似乎只有在tail完成后才能执行grep,也就是说永远不会执行。
是否可以在连续流上使用grep?
我的意思是有点像tail-f<file>命令,但输出上有grep,以便只保留我感兴趣的行。
我尝试过tail-f<file>|grep模式,但似乎只有在tail完成后才能执行grep,也就是说永远不会执行。
当前回答
没有看到任何人为我提供了通常的帮助:
less +F <file>
ctrl + c
/<search term>
<enter>
shift + f
我更喜欢这样,因为您可以随时使用ctrl+c停止并浏览文件,然后只需按shift+f返回实时流式搜索。
其他回答
我认为你的问题是grep使用了一些输出缓冲。尝试
tail -f file | stdbuf -o0 grep my_pattern
它将grep的输出缓冲模式设置为无缓冲。
你可以把这个答案看作是增强。。通常我使用
tail -F <fileName> | grep --line-buffered <pattern> -A 3 -B 5
-F在文件旋转的情况下更好(如果文件旋转,-F将无法正常工作)
-A和-B用于在图案出现前后获取线条。。这些块将出现在虚线分隔符之间
但对我来说,我更喜欢做以下事情
tail -F <file> | less
如果您想在流式日志中搜索,这非常有用。我的意思是,回头再向前看
是的,这实际上会很好。Grep和大多数Unix命令一次只能对一行流进行操作。每一条从尾部出来的线都会被分析,如果匹配的话就会被传递。
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。
在没有行缓冲选项的地方,使用awk(另一个很棒的bash实用程序)而不是grep!它将不断地从尾部传输数据。
这是如何使用grep的
tail -f <file> | grep pattern
这就是你使用awk的方式
tail -f <file> | awk '/pattern/{print $0}'