Как разделить цветовые коды из stdout и канала в файл и stdout

Оказывается, что tar GNU создали разность в (-d):

$ #Create the archive and a difference:
$ echo one>file1;echo two>file2;tar -czf archive.tgz file*;echo changing>>file1
$ tar -dzf archive.tgz
file1: Size differs

Если Вы работаете с tar, который не имеет этой попытки:

$ for F in `tar -tzf archive.tgz`;do tar -xzOf archive.tgz $F|diff --brief - $F;done
Files - and file1 differ
14
31.01.2014, 19:56
1 ответ

Согласно удалению цветов от вывода, Вы управляете, должен быть:

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"

Поскольку удобство обосновывает, что Вы могли также создать псевдоним в /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"'

[Править]

С данным производит Вас, может проверить это собой:

#!/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.!.

Вывод:

$ 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.!.
12
27.01.2020, 19:51
  • 1
    -r флаг, кажется, не работает над Mac BSD, таким образом, я пытался использовать -E был бы, казаться, быть самым подобным, и это все еще производит в файле журнала как таковом... ^[36m| ^[(B^[[m^[[37mSourcing files...^[[m Это также возвращается как | ^[(BSourcing files... на моем поле Linux. –  iamnewton 03.02.2014, 22:26
  • 2
    покажите нам вывод своей печати cmd переданный по каналу с |xxd и Ваш TERM огибающий var. –   04.02.2014, 00:36
  • 3
    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 07.02.2014, 02:47
  • 4
    это все еще исследует меня те же результаты, за исключением того, что я должен измениться stripcolors функционируйте, потому что Mac OS X не понимает -r опция для sed команда. Я предполагаю, что Вы находитесь на своего рода дистрибутиве Linux? –  iamnewton 11.02.2014, 03:54
  • 5
    К сожалению, это не работает над OS X. –  Jorge Bucaran 16.01.2015, 15:53

Теги

Похожие вопросы