Dosyayı ANSI renklerle görüntüle


12

ANSI renkleri olan bir dosyam var.

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

Bu dosyanın içeriğini olduğu gibi bir terminalde görüntülemek istiyorum cat, ancak renkleri de görüntülemek istiyorum.


4
less -RÖrneğin, kullanma .
Thomas Dickey

Baskınız ne cat?
techraf

1
OP'nin sorusunun ilginç olmak için çok fazla olası cevabı vardı. İle başlayın echo -e $(cat test.txt).
Thomas Dickey

Yanıtlar:


10

Bu tam bash sorusuna bir çözüm arıyordum. @Thomas Dickey'in bana en zarif çözümü sağlayan yorumunu neredeyse kaçırdım.

echo -e $(cat test.txt)

Benim için işe yaramayan bazı şeyler (görünüşe göre yankılanacak şeyleri yapamazsın)

cat test.txt | echo -e

veya

less -R test.txt

Sahip olduğum bir başka sorun, echo -e'nin dosyadaki satırsonu ve bitişik boşlukları güzelce basmamasıydı. Bunları yazdırmak için aşağıdakileri kullandım.

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

Bu, aşağıdakileri içeren bir test.txt dosyası için çalışır

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

Güzel cevap, ama \abenim için zili çalar. Zili çalmayan ikinci sed komutunu değiştirdim sed 's/ /\\033\\a /g'.
şahin

1
Farklı terminal programlarında (iTerm, Atom / nüklid) daha fazla test ve tutarsızlık bulduktan sonra, sadece $(cat file.txt)çift ​​tırnak içine almayı ve sonunda yeni bir satır eklemeyi en iyi buldum - sed'e gerek yok: echo -ne "$(<file.txt)" \\nya da echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Bu, bash'ın metinde glob genişletmesi yapmasını da önler.
şahin

1

catKontrol karakterlerinden renk görmüyorsanız büyük olasılıkla bozulmamış demektir.

Bazı araçlar kontrol karakterlerini çıkarır, ancak kuyruk ucunda kalır.

Karşılaştırmak:

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

için

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

Kontrol dizisini kalandan yeniden oluşturabilirsiniz, ancak kullandığınız normal ifade yanlışlıkla istenmeyen karakter dizilerini vb. Çekebilir.

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

rengi örnek dizgiye geri yükler.


-1

Varsayılan olarak çalışması gerekir. Örneğin eğer yaparsam ls --color=always > /tmp/ave daha cat /tmp/asonra renkleri görürüm. İle kontrol edilmesi od, dosyanın ANSI renkleri kullandığını doğrular.

Bu yüzden terminalinizin ANSI renklerini destekleyip desteklemediğini (ve etkin olduklarını) kontrol etmeniz gerektiğini düşünüyorum.


1
Bu soruya cevap vermedi.
Thomas Dickey

1
Hayır. Daha az -R aslında benim için sorunu çözdü.
Ken Ingram
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.