linux 着色尾部输出bash

von4xj4u  于 2023-03-01  发布在  Linux
关注(0)|答案(1)|浏览(106)

我有个聊天脚本

tail -f chatlog.txt

以显示聊天。消息的编写方式是,当您回显它时,它会输出为彩色文本。
chatlog.txt:

20:39 \033[4;33musername\033[0m: so with all of my experience
20:39 \033[4;33musername\033[0m: we shall prevail
20:40 \033[4;33musername\033[0m: the taxi jobs are very
20:40 \033[4;33musername\033[0m: yes
21:02 \033[4;34mJacob\033[0m has joined the chat!

如果我使用以下代码显示,它工作正常:

var=$(tail chatlog.txt)
echo -e "$var"

但是如果我用tail -f chatlog.txt显示它,就没有颜色了。我试过其他的解决方案,但似乎都不起作用。

z8dt9xmd

z8dt9xmd1#

您的输出包含文本转义序列;因此,你所需要的只是一个程序,它能识别这些字符并将其替换为它们所引用的字符。在POSIX兼容的shell中,printf %b将执行此操作。
因此:

tail -f chatlog.txt | while IFS= read -r line; do printf '%b\n' "$line"; done

有关while read机制的一般性讨论,请参见BashFAQ #1。要指出一些要点:

  • 使用IFS=可以防止从行中删除前导和尾随空格。
  • read使用-r参数可防止read删除文字反斜杠。

相关问题