如何用尾巴覆盖最后一行?

时间:2015-10-26 13:32:31

标签: perl newline tail

要监视日志文件,请使用以下命令: tail -f -n 1 myfile.log | perl -ne 'print if s/progress (\d+).*/$1%/g' 这将在我的终端中创建一个带有数字的行。如何修改此命令以覆盖最后一行?添加\r\033[K并不起作用: tail -f -n 1 myfile.log | perl -ne 'print if s/progress (\d+).*/`\r\033[K$1%/g'

1 个答案:

答案 0 :(得分:4)

当您在Perl中读取一行时,不会删除尾随的换行符。此外,除非存在.修饰符,否则正则表达式中的s与换行符不匹配。因此,在您的第二个片段中,\r字符始终打印为一行中的第一个字符,因此没有任何效果。

要解决此问题,可以执行以下操作:

  1. 在正则表达式中添加s修饰符以删除换行符。
  2. 在打印字符串之前,请打印\r字符以移至该行的第一个位置。
  3. 由于STDOUT是行缓冲的,因此每次打印时都需要将其更改为自动刷新。这可以通过将1分配给$|
  4. 来完成

    最终代码:

    perl -ne '$|=1; print if s/progress (\d+).*/\r$1%/s'