以 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 顏色(並且它們已啟用)。

相關內容