ANSIカラーのファイルを表示する


12

ANSIカラーのファイルがあります。

test.txt:
\e[0;31mExample\e[0m

このファイルの内容をターミナルでcat表示したいのですが、色も表示したいと思います。


4
less -Rたとえばを使用します。
Thomas Dickey、

あなたのcatプリントは何ですか?
techraf 2016

1
OPの質問には、回答が多すぎて面白くない。から始めecho -e $(cat test.txt)ます。
Thomas Dickey

回答:


10

私はこの正確なbashの質問に対する解決策を探していました。最もエレガントな解決策を提供してくれた@Thomas Dickeyのコメントを見逃してしまいました。

echo -e $(cat test.txt)

私にとってうまくいかなかったいくつかのものがあります(どうやらあなたはパイプでエコーすることができません)

cat test.txt | echo -e

または

less -R test.txt

私が抱えていたもう1つの問題は、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

良い答えですが\a、私にはベルが鳴ります。sed 's/ /\\033\\a /g'ベルを鳴らさない2番目のsedコマンドを変更しました。
ホーク

1
さらにテストおよび別の端末プログラムでより多くの矛盾を見つけた後(ITERM、アトム/核種)、私はラップにそれ最善を見つけた$(cat file.txt)二重引用符で、最後に改行を追加- sedのための必要はありませんが-そう:echo -ne "$(<file.txt)" \\nまたはecho -ne "$(cat <<"EOF" . . . EOF)" \\n。これにより、bashがテキストでグロブ拡張を実行することもできなくなります。
ホーク

1

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"

色を例の文字列に戻します。


-1

デフォルトで動作するはずです。例えば、私が行う場合ls --color=always > /tmp/aと比べてcat /tmp/a、私は色を参照してください。で確認するodと、ファイルがANSIカラーを使用していることが確認されます。

だから私はあなたの端末がANSI色をサポートしているかどうか(そしてそれらが有効になっているかどうか)をチェックすべきだと思います。


1
これは質問に答えませんでした。
Thomas Dickey

1
いいえ、少ない-Rで実際に問題が解決しました。
Ken Ingram
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.