Bash仅处理文件中的最后一行

时间:2013-06-22 00:29:50

标签: file grep tail

我正在尝试每次保存时处理文件中的最后一行。这就是我到目前为止所做的:

tail -F -n0 '/path/to/foo.txt' |
  grep "." | while read line
    do echo "$line"   
  done

如果我删除grep,我将在第一次运行脚本时获取最后一行,但是当目标文件保存到时,将输出整个文件,而不是新的最后一行(期望的行为)。

我需要grep来删除返回,因为这通常是这些文本文件中的最后一个字符。我发现上面的输出通过管道传输到grep,不会返回任何内容。

我是新手,所以非常感谢任何指导。

1 个答案:

答案 0 :(得分:2)

我担心tail不会那样工作。 -f / -F选项在处理初始查询-n0之后对所有数据进行流式处理,据我所知,没有办法只使用a获取新数据的最后一行单tail次调用。

每次文件大小更改时,可以使用的解决方案是重新运行tail。在Linux上你可以使用inotify子系统来提高效率,我不知道什么是MacOS等价物。一般的想法如下:

while inotifywait -e modify /your/file  # this would wait for the next change on Linux
do
    tail -1 | …your processing here…
done