要监视日志文件,请使用以下命令:
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'
答案 0 :(得分:4)
当您在Perl中读取一行时,不会删除尾随的换行符。此外,除非存在.
修饰符,否则正则表达式中的s
与换行符不匹配。因此,在您的第二个片段中,\r
字符始终打印为一行中的第一个字符,因此没有任何效果。
要解决此问题,可以执行以下操作:
s
修饰符以删除换行符。\r
字符以移至该行的第一个位置。STDOUT
是行缓冲的,因此每次打印时都需要将其更改为自动刷新。这可以通过将1
分配给$|
。最终代码:
perl -ne '$|=1; print if s/progress (\d+).*/\r$1%/s'