【发布时间】:2023-03-12 01:37:01
【问题描述】:
假设我有这个文件内容:
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 保持管道内容到 grep,一旦这个匹配字符串被写入文件,-m1 使 grep 成功退出(即在第一次匹配时)。
但是对于小文件,grep 匹配正确并打印匹配,但是直到我按 ctrl+c 才出来
为什么会有这种行为差异,知道如何解决这个问题吗? 谢谢
【问题讨论】: