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.
cat
?
echo -e $(cat test.txt)
.
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.
cat
?
echo -e $(cat test.txt)
.
Yanıtlar:
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
\a
benim için zili çalar. Zili çalmayan ikinci sed komutunu değiştirdim sed 's/ /\\033\\a /g'
.
$(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)" \\n
ya da echo -ne "$(cat <<"EOF" . . . EOF)" \\n
. Bu, bash'ın metinde glob genişletmesi yapmasını da önler.
cat
Kontrol 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.
Varsayılan olarak çalışması gerekir. Örneğin eğer yaparsam ls --color=always > /tmp/a
ve daha cat /tmp/a
sonra 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.
less -R
Örneğin, kullanma .