Ekran görüntüsünün , metin oluşturmayı kontrol eden karışık ANSI renk kodlarını gösterdiği görülüyor . Kalın / parlak metin, ␛[1mgenellikle terminaliniz tarafından yorumlanan ve doğrudan ekranda görüntülenmeyen bir sekansla üretilir : sadece metnin bir sonraki bitini parlaklaştırır. Un grepped çıktısının ekran görüntüsü, her satırdaki etiketler ve değerler arasındaki renk farkını gösterir, böylece orijinal çıktı bunları kullanır.
Bu sıra, grepkoddaki "m" ile eşleşen (bir harf olduğu için [a-z]) ve kırmızı ile vurgulamaya çalışan finaliniz tarafından kırılmış gibi görünüyor . Bu, terminalinizin işleyemediği kısmi bir kaçış dizisi bıraktı.
Kaçış karakteri ␛, bilinmeyen karakter kutularında görüntülenen onaltılık sayı olan U + 001B'dir. Görüntülenen çıkış (kutu), a [, a 1, kırmızı ve mardından beklenen eşleşen "eng" metni ve sonunda "22" ("normal renk ve yoğunluk" için sayısal kod) ile aynıdır.
Kırık çıktı gerçekten:
␛ [1 ␛ [31m meng ␛ [22m ␛ [22 ␛ [31m m ␛ [22m
burada ␛[31mmetin kırmızı olur ve ␛[22mher ikisi grepde mkarakterlerin etrafından orijinal metne eklenir . Orijinal sadece:
␛ [1m eng ␛ [22m
ki bu sadece parlak " eng" ve ardından normal metne geri dönüyor.
Finali değiştirerek ve grepiçine grep --color=alwaysboru oluşturarak bunu kontrol edebilirsiniz hexdump, bu da yazdırılamayan tüm karakterleri ve terminaliniz tarafından yorumlanan karakterleri gösterecektir.
Bununla birkaç yolla başa çıkabilirsiniz. Bunlardan biri şu grepan için takma adınız olmadan kullanmaktır :
./trans --id --input /path/to/txt | grep ISO | \grep [a-z]
Ters eğik çizgi geçici olarak takma adı atlar ve grepdoğrudan çalışır .
Başka bazı öneriler vardır kendisi için orijinal komutundan ANSI kodları, dışarı şerit etmektir bu soru :
./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]
Yine bir başka seçenek de ucuna yabancı bir boru eklemektir:
./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat
Finalin grepçıktısı doğrudan TTY'ye değil, catbir boru yoluyla, renkli vurgulamayı eklemez.
Belki de en iyi seçenek, Çevirme Kabuğu'nu terminal kontrol dizilerini, bir terminalde olmadığında ilk etapta kendi çıkışında kullanmayı bıraktırmaktır. Bu, sizden yazarlarına bir hata raporu ve Translate Shell'in ansi()işlevine yönelik bir kod düzeltmesi içerecektir , ancak biri bunu biraz koruyabilir:
TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
Bu dumb, en azından ECMA-48 renk desteğine sahip olmadığını tanıdığı Çevir Kabuğu ortamındaki terminal türünü geçer . (Ne yazık ki, Translate Shell terminfo kullanmaz ve sadece kendi kodunda anladığı terminal türlerini ve kullandığı kontrol sekanslarını sabitleştirir.)