Renk kodları stdout ve borudan dosya ve stdout'a nasıl çıkarılır


14

İçinde printfbazı tputkarışık olan bir program var ve çıktı bir dosya yanı sıra stdout için boru istiyorum. sedSenaryomda gereksiz bağımlılıklar istemediğim için kullanmayı tercih ederim . İşte şimdiye kadar aldığım şey.

printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" | tee install.log

Bu tek sorun benim günlük dosyası gibi tüm renk çıktısını alıyor olmasıdır ...

^[[36m| ^[(B^[[m^[[37mSourcing files...^[[m

Sadece sahip olmak istiyorum | Sourcing files...



@StephaneChazelas, şu an için perl betiklerini kullanmamaya çalışıyorum ve sedseçenekler bile işe yaramıyor.
iamnewton

Yanıtlar:


12

Renkleri çıktıdan kaldırmaya göre , komutunuz şöyle olmalıdır:

printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" |\
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" |tee install.log
w/o "-r"
sed "s/\x1B\[\([0-9]\{1,2\}\(;[0-9]\{1,2\}\)\?\)\?[mGK]//g"

Kolaylık nedenlerinden ötürü, /etc/profile

alias stripcolors='sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"'
w/o '-r'
alias stripcolors='sed "s/\x1B\[\([0-9]\{1,2\}\(;[0-9]\{1,2\}\)\?\)\?[mGK]//g"'

[Düzenle]

Verilen çıktı ile bunu kendiniz kontrol edebilirsiniz:

#!/usr/bin/perl

while ($line=<DATA>) {
    $line =~ s/^[0-9a-f]+: //;
    while ($line =~ s/([0-9a-f]{2})(?=[0-9a-f]{2}| )//) {
      print chr(hex($1));
    }
}
__DATA__
0000000: 1b5b 316d 1b5b 3333 6de2 9aa0 2020 5761 .[1m.[33m... Wa
0000010: 726e 696e 673a 201b 2842 1b5b 6d4e 6f20 rning: .(B.[mNo
0000020: 2f55 7365 7273 2f61 7077 2f2e 6261 7368 /Users/apw/.bash
0000030: 2066 6f75 6e64 2e21 0a found.!.

Çıktı:

$ perl checkerbunny|xxd
0000000: 1b5b 316d 1b5b 3333 6de2 9aa0 2020 5761  .[1m.[33m...  Wa
0000010: 726e 696e 673a 201b 2842 1b5b 6d4e 6f20  rning: .(B.[mNo 
0000020: 2f55 7365 7273 2f61 7077 2f2e 6261 7368  /Users/apw/.bash
0000030: 2066 6f75 6e64 2e21 0a                    found.!.

$ perl checkerbunny|stripcolors|xxd
0000000: e29a a020 2057 6172 6e69 6e67 3a20 1b28  ...  Warning: .(
0000010: 424e 6f20 2f55 7365 7273 2f61 7077 2f2e  BNo /Users/apw/.
0000020: 6261 7368 2066 6f75 6e64 2e21 0a         bash found.!.

1
-rBen kullanarak çalıştı böylece bayrak, Mac BSD çalışma görünmüyor -Eolur en benzer gibi görünüyor ve hala gibi günlük dosyasında çıkışının oluyor ... ^[36m| ^[(B^[[m^[[37mSourcing files...^[[m Ayrıca olarak geri geliyor | ^[(BSourcing files...Linux makinemde.
iamnewton

lütfen bize bildirin baskı cmd ile boru |xxdve TERMenv çıktı. var.

TERM=> xterm. 0000000: 1b5b 316d 1b5b 3333 6de2 9aa0 2020 5761 .[1m.[33m... Wa 0000010: 726e 696e 673a 201b 2842 1b5b 6d4e 6f20 rning: .(B.[mNo 0000020: 2f55 7365 7273 2f61 7077 2f2e 6261 7368 /Users/apw/.bash 0000030: 2066 6f75 6e64 2e21 0a found.!.
iamnewton

1
stripcolorsMac OS X komut -rseçeneğini anlamadığı için işlevi değiştirmek zorunda kalmam dışında, aynı sonuçları bana hala vets sed. Bir çeşit Linux dağıtımında olduğunuzu varsayıyorum?
iamnewton

3
Ne yazık ki, bu OS X üzerinde çalışmıyor
Jorge Bucaran
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.