2013-10-10 14 views
10

kullanarak bir metin dosyasından ANSI renk kodlarını kaldır ,Ben kullandığı ancak renk kodları da bilmem dosyadan nasıl kaldırılacağını edilir istediğim şey dahil bir metin dosyasına bir bash çalışan komut dosyası ve çıkışları vardır Bash

^[[38;1;32mHello^[[39m 
^[[38;1;31mUser^[[39m 

yüzden sadece bu sorunu çözüyor mu Hello ve Kullanıcı

+0

İlgili cevap kullanarak piton: http://stackoverflow.com/questions/14693701/how-can-i-remove -the-ansi-kaçış-diziler-dan-bir-string-in-piton – GreyCat

+2

yinelenen: http://unix.stackexchange.com/questions/4527/program-that-passes-stdin-to-stdout-with-color -kodlar-soyulmuş – GreyCat

cevap

1

sol olmak istiyorum yani?

$ echo "^[[38;1;32mHello^[[39m" | sed -e 's/\^\[\[[0-9;]\{2,\}m//g' 
Hello 

şerefe! ESC[#;#H or ESC[#;#f hamle # satır imleç, kolon # ESC[K açık ESC[2J net ekranı ve ev imleci:

+0

Hayır, öyle değil, çünkü '^ [' ASCII Escape karakterini temsil eder (Control- [, code 27). – Armali

+0

@Armali: noktanızı anlamıyorum. OP'nin şartlarına göre çalışması gerekir. Çalışılmadığı bir örnek gönderir misiniz? Alkış !! – MacUsers

+0

Evet ... TERM = xterm tput setf 1 | -e sed 's/\^\ [\ [[0-9] \ {2 \} m // g' | HexDump -C' – Armali

3
sed -r "s/\x1B\[(([0-9]{1,2})?(;)?([0-9]{1,2})?)?[m,K,H,f,J]//g" file_name 

bu komut bu ANSI kodlarının bazıları dosyaya

gelen özel karakterler ve renk kodlarını kaldırır satırın sonuna, berrak kod durumunda

nota ne sayısı ne de noktalı virgül ;

yoktur

aşağıda yorum katılıyorum: sayılar 2'den fazla basamaklı lütfen bu kullanmak ise:

sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g" filename 
+0

kodda sayı parçalarının sayısı hakkında bir garanti yoktur, renk ayarı yapmak için fazlalık olmaksızın 5 sayıya kadar olabilir. diğer özellikleri (örneğin linux consile bell frekansı) ayarlamak için kodlar, bir satırda 2'den fazla basamağa sahip olabilir. – Jasen

+0

sizinle hemfikir Jasen :-) –