我有一個 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/a
,cat /tmp/a
我就會看到顏色。檢查od
確認該文件使用 ANSI 顏色。
所以我認為你應該檢查你的終端是否支援 ANSI 顏色(並且它們已啟用)。