Ond*_*žka 22
谢谢你的回答,但重要的是这个过程会阻塞直到找到,然后结束.我找到了这个:
grep -q 'PATTERN' <(tail -f file.log)
Run Code Online (Sandbox Code Playgroud)
-q不太便携,但我只会使用红帽企业Linux,所以没关系.并且超时:
timeout 180 grep -q 'PATTERN' <(tail -f file.log)
Run Code Online (Sandbox Code Playgroud)
小智 6
我使用sed而不是grep创建一个变体,打印所有解析的行.
sed '/PATTERN/q' <(tail -n 0 -f file.log)
Run Code Online (Sandbox Code Playgroud)
该脚本位于https://gist.github.com/2377029
看看这个--max-count选项:
tail -f file.log | grep -m 1 'PATTERN'
Run Code Online (Sandbox Code Playgroud)
它将在第一行匹配后退出PATTERN。
编辑:请注意下面@Karoly 的评论。如果file.log速度很慢,则进程可能会阻塞,直到在匹配行之后grep将其他内容添加到文件中。
echo 'context PATTERN line' >> file.log ## grep shows the match but doesn't exit
Run Code Online (Sandbox Code Playgroud)
将打印匹配的行,但直到将其他内容附加到文件后才会退出(即使它还没有换行符):
echo -n ' ' >> file.log ## Now the grep process exits
Run Code Online (Sandbox Code Playgroud)
在某些情况下(例如高速日志文件),这并不是什么大问题,因为新内容可能很快就会添加到文件中。
另请注意,当从控制台作为 stdin 读取时,不会发生此行为,因此grep从管道读取的方式似乎有所不同:
$ grep -m1 'PATTERN' - # manually type PATTERN and enter, exits immediately
$ cat | grep -m1 'PATTERN' # manually type PATTERN and enter, and it hangs
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14030 次 |
| 最近记录: |