Bash &引用;tail-f<;文件>&引用;输送至;grep-m1“;在第一场比赛中没有退出
假设我有此文件内容:Bash &引用;tail-f<;文件>&引用;输送至;grep-m1“;在第一场比赛中没有退出,bash,grep,Bash,Grep,假设我有此文件内容: 1 lots 2 of 3 content 4 above 5 6 My match string 7 ======================= 8 9 other 10 content 11 below 我想要“我的匹配字符串”的行号 有一些事实: (1). 匹配字符串在文件中只出现一次。 (2). 运行脚本时,文件可能不存在。 (3). 文件可能非常大,生成需要时间,这一行在生成几秒钟后才被写入 我的bash脚本必须包含生
1 lots
2 of
3 content
4 above
5
6 My match string
7 =======================
8
9 other
10 content
11 below
我想要“我的匹配字符串”的行号
有一些事实:
(1). 匹配字符串在文件中只出现一次。
(2). 运行脚本时,文件可能不存在。
(3). 文件可能非常大,生成需要时间,这一行在生成几秒钟后才被写入
我的bash脚本必须包含生成文件的命令,然后查找上述行号:
我的脚本如下所示:
<command to generate file>
if file exists
tail -f -n +1 my_log_file | grep "My match string" -nm1
如果文件存在
tail-f-n+1我的日志文件| grep“我的匹配字符串”-nm1
对于需要时间生成的大文件,此命令有效。
tail-f将管道内容保存到grep,一旦这个匹配字符串被写入文件,-m1将使grep成功退出(即在第一次匹配时)
但是对于小文件,grep会正确匹配并打印匹配结果,但直到我按下ctrl+c时才会显示出来
为什么会有这种行为上的差异,知道如何解决吗?
谢谢扔掉无用的
尾巴
发生了什么事
应该存在,但是grep
将不会退出,直到它尝试向管道写入内容并注意到没有人从中读取tail-f
tail
?例如,是否将头写入日志文件?如果我们知道最大上限的话,我看到timeout 2 tail-f-n+1 build-psf.sh | grep-m1“复制打包内容”这只是通过保持超时限制来确保命令不会永远挂起。