Tampilkan file dengan warna ANSI


12

Saya punya file dengan warna ANSI.

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

Saya ingin menampilkan konten file ini di terminal, seperti cathalnya, tetapi saya juga ingin menampilkan warna.


4
Menggunakan less -R, misalnya.
Thomas Dickey

Apa catcetak Anda ?
techraf

1
Pertanyaan OP memiliki terlalu banyak jawaban yang mungkin menarik. Mulai dengan echo -e $(cat test.txt).
Thomas Dickey

Jawaban:


10

Saya sedang mencari solusi untuk pertanyaan bash yang tepat ini. Saya hampir ketinggalan komentar @Thomas Dickey yang memberi saya solusi paling elegan.

echo -e $(cat test.txt)

Beberapa hal yang tidak berhasil bagi saya adalah (tampaknya Anda tidak dapat menyambungkan hal-hal ke gema)

cat test.txt | echo -e

atau

less -R test.txt

Masalah lain yang saya miliki adalah bahwa echo -e tidak mencetak baris baru dan spasi putih yang berdekatan di dalam file dengan baik. Untuk mencetaknya, saya menggunakan yang berikut ini.

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

Ini berfungsi untuk file test.txt yang berisi

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

Jawaban yang bagus, tetapi \amembunyikan bel untuk saya. Saya mengubah perintah sed kedua Anda sed 's/ /\\033\\a /g'yang tidak membunyikan bel.
elang

1
Setelah pengujian lebih lanjut dan menemukan lebih banyak inkonsistensi dalam program terminal yang berbeda (iTerm, Atom / nuclide), saya telah menemukan yang terbaik untuk hanya membungkus $(cat file.txt)tanda kutip ganda dan menambahkan baris baru di akhir - tidak perlu untuk sed - jadi: echo -ne "$(<file.txt)" \\natau echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Itu juga mencegah bash melakukan ekspansi global dalam teks.
hawk

1

Jika Anda tidak melihat warna dari catkarakter kontrol mungkin tidak utuh.

Beberapa alat menghapus karakter kontrol tetapi biarkan di ujung ekor.

Membandingkan:

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

untuk

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

Anda mungkin dapat membangun kembali urutan kontrol dari yang tersisa, meskipun itu bukan bukti bodoh karena regex yang Anda gunakan mungkin secara tidak sengaja menarik urutan karakter yang tidak diinginkan, dll. Tapi misalnya:

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

akan mengembalikan warna ke string contoh.


-1

Ini seharusnya bekerja secara default. Misal jika saya lakukan ls --color=always > /tmp/adan daripada cat /tmp/a, saya melihat warnanya. Memeriksa dengan odmengkonfirmasi bahwa file tersebut menggunakan warna ANSI.

Jadi saya pikir Anda harus memeriksa apakah terminal Anda mendukung warna ANSI (dan mereka diaktifkan).


1
Ini tidak menjawab pertanyaan.
Thomas Dickey

1
Tidak. Kurang -R benar-benar menyelesaikan masalah bagi saya.
Ken Ingram
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.