以 ANSI 颜色显示文件

以 ANSI 颜色显示文件

我有一个 ANSI 颜色的文件。

测试.txt:
\e[0;31mExample\e[0m

我想在终端中显示该文件的内容,就像cat那样,但我也想显示颜色。

答案1

我正在寻找这个确切的 bash 问题的解决方案。我差点错过了@Thomas Dickey 的评论,它为我提供了最优雅的解决方案。

echo -e $(cat test.txt)

有些对我不起作用的事情是(显然你不能通过管道来回显)

cat test.txt | echo -e

或者

less -R test.txt

我遇到的另一个问题是 echo -e 没有很好地打印文件中的换行符和连续空格。为了打印这些,我使用了以下内容。

echo -ne $(cat test.txt | sed  's/$/\\n/' | sed 's/ /\\a /g')

这适用于包含以下内容的 test.txt 文件

\e[0;31mExa         mple\e[0m
\e[0;31mExample line2\e[0m

答案2

如果您没有看到cat控制字符的颜色可能不完整。

有些工具会删除控制字符,但保留在尾部。

比较:

 echo -e "\e[0;31mExample\e[0m foo"

 echo -e "[0;31mExample[0m foo" 

您也许能够从剩下的内容重建控制序列,尽管这并不是万无一失的,因为您使用的正则表达式可能会意外地引入意外的字符序列等。但例如:

echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"

会将颜色恢复到示例字符串。

答案3

有一个包包含专门执行此操作的可执行文件:

ttyrec

您可以使用以下任一命令将其安装在 Debian 派生的 Linux 安装上:

sudo apt install ttyrec

或者在 RedHat 上

sudo yum install ttyrec

正确重播文件的命令是用

ttyplay <filename>

另请查看名为 tty2gif 的包,它将类似的文件转换为 gif。

答案4

它应该默认工作。例如,如果我这样做ls --color=always > /tmp/acat /tmp/a我就会看到颜色。检查od确认该文件使用 ANSI 颜色。

所以我认为你应该检查你的终端是否支持 ANSI 颜色(并且它们已启用)。

相关内容