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, ␛[1m
genellikle 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 grep
ped çı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, grep
koddaki "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 m
ardı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 ␛[31m
metin kırmızı olur ve ␛[22m
her ikisi grep
de m
karakterlerin 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 grep
içine grep --color=always
boru 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 grep
an 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 grep
doğ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, cat
bir 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.)