Sed实时回车

Sed实时回车,sed,carriage-return,Sed,Carriage Return,所以基本上我有: while true; do printf "%s\r" $(date +"%H:%M:%S"); sleep 1; done | sed s/"\(^[^$]*$\)"/"[test] \1"/g 本例的目标是使用回车符在同一行上打印日期,然后通过sed过滤输出,将[test]前置到该行,就像我正在使用 `printf "[test] %s\r" $(date)` 相反,sed什么也不输出。我试过stdbuf和unbuffer,但它们都不起作用,或者我没有正确

所以基本上我有:

 while true; do printf "%s\r" $(date +"%H:%M:%S"); sleep 1; done | sed s/"\(^[^$]*$\)"/"[test] \1"/g  
本例的目标是使用回车符在同一行上打印日期,然后通过sed过滤输出,将[test]前置到该行,就像我正在使用

 `printf "[test] %s\r" $(date)`  

相反,sed什么也不输出。我试过stdbuf和unbuffer,但它们都不起作用,或者我没有正确使用它们。我想使用ffmpeg实现这一点,但更重要的是,任何使用回车符的输出都可以。

您可以使用这一点来解决以下问题:

while true; do printf "%s\n" $(date +"%H:%M:%S"); sleep 1; done|awk '{printf("[test]%s\r",$0)}'
当您使用printf%s\r时,您是在一行中打印字符串,这意味着该行永远不会结束,但只有当一行结束时,sed才会起作用表示该行已完成。我想这就是你的代码不起作用的原因


您最好让最后一个命令将行打印成一行。

您能更清楚地说明您要做什么吗?基本上,在ffmpeg输出中的每一行都预先添加[ffmpeg]。它适用于每一行,除了带回车的行。请阅读并理解,但我不清楚这与我的问题有什么关系。你提供了一些代码,但你没有说它当前的功能有什么问题,你也没有问任何问题。不清楚您在问什么。虽然在本例中这样做是可行的,但我们的目标不是更改printf,而是保持原样,并通过sed或awk进行传输(如果可行),因为我无法更改ffmpeg或其他使用\r\n的程序的输出。