lor*_*o-s 3 grep logs tail cut
我必须检查不断增长的日志实时,我发现,这让我的问题会错过一些线路使用(我不能什么不懂行)tail -f或者tailf,grep和cut。
我使用grep是因为我想过滤包含特定单词的行,然后cut -c -NUM因为有些行很长,我不希望它们在我的终端窗口中换行。
这是一个最小的示例,其中我正在观看由“第 N 行”行组成的示例日志,过滤单词“行”,在这种情况下缺少所有行(显然^C是我杀死了进程):
$ tail -n 3 -f log
13th line
14th line
15th line
^C
$ tail -n 3 -f log | grep --color=never 'line'
13th line
14th line
15th line
^C
$ echo $COLUMNS
100
$ tail -n 3 -f log | grep --color=never 'line' | cut -c -$COLUMNS
^C
Run Code Online (Sandbox Code Playgroud)
请注意,此问题仅tail -ftailfgrepcut出现在(或)和组合. 如果我不在管道grep中间或cut末端使用,则不会丢失线。如果我tail -f用tail或替换cat,没问题。在这个较长的示例中,您可以看到所有可能的情况。
我使用的是 Ubuntu 13.04、GNU coreutils ( tail, cut) 8.20 版和GNU grep 2.14。
您的示例的问题是在grep和之间进行缓冲cut。当缓冲区已满(在我的系统上为 4kB)时,数据只会沿着管道传递。
尝试添加--line-buffered以grep使其在每行之后刷新缓冲区。