stdout에서 색상 코드를 제거하고 파일 및 stdout으로 파이프하는 방법


14

printf일부를 tput혼합하여 사용하는 프로그램이 있으며 출력을 파일뿐만 아니라 stdout에 파이프하고 싶습니다. sed스크립트에 불필요한 의존성을 원하지 않기 때문에 사용하고 싶습니다 . 여기까지 내가 가진 것입니다.

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

이것에 대한 유일한 문제는 내 로그 파일이 모든 색상 출력을 얻는 것입니다 ...

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

나는 그것을 가지고 싶습니다 | Sourcing files...



@ StephaneChazelas, 나는 지금 당장 펄 스크립트를 사용하지 않으려 고 노력하고 있으며 sed옵션 조차도 작동하지 않는 것 같습니다.
iamnewton

답변:


12

output 에서 색상제거 하면 다음과 같이 명령합니다.

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

1
-r내가 사용하려고 때문에 플래그, 맥 BSD에 작업에 나타나지 않는 -E것이 가장 유사한 것으로 보인다 여전히 같은 로그 파일에 출력 할 것 ... ^[36m| ^[(B^[[m^[[37mSourcing files...^[[m 그것은 또한으로 돌아 오면 | ^[(BSourcing files...내 리눅스 박스에.
iamnewton

함께 제공되는 인쇄 cmd의 출력 |xxdTERMenv를 알려주십시오 . 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이 명령 -r옵션을 이해하지 못하기 때문에 기능 을 변경해야한다는 점을 제외하고는 여전히 동일한 결과 를 확인합니다 sed. 나는 당신이 일종의 리눅스 배포판에 있다고 가정하고 있습니까?
iamnewton

3
불행히도, 이것은 OS X에서 작동 하지 않습니다.
Jorge Bucaran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.