"script" 명령을 사용하여 명령줄에서 대화형 세션을 기록할 수 있습니다. 그러나 여기에는 모든 제어 문자가 포함됩니다.그리고색상 코드. "col -b"를 사용하여 제어 문자(예: 백스페이스)를 제거할 수 있지만 색상 코드를 제거하는 쉬운 방법을 찾을 수 없습니다.
명령줄을 일반적인 방법으로 사용하고 싶기 때문에 색상을 비활성화하고 싶지는 않습니다. 단지 스크립트 출력에서 색상을 제거하고 싶습니다. 또한 문제를 해결하는 정규식을 찾는 것이 가능하다는 것을 알고 있지만 더 간단하고 더 안정적인 솔루션을 원합니다. 정규식을 개발할 때 내가 모르는 코드가 있으면 어떻게 됩니까?
디스플레이 문제:
spl62 tmp:스크립트 스크립트가 시작되고 파일이 TypeScript입니다. spl62 lepl: ls add-licence.sed build-example.sh 테스트 제출 Push-docs.sh 추가-licence.sh build.sh 삭제-licence.sed setup.py asn 빌드-테스트.sh 삭제-licence.sh src build-doc.sh는 doc-src test.ini를 정리합니다. spl62 lepl:종료 스크립트가 완료되었으며 파일은 TypeScript입니다. spl62 tmp: cat -v 타이프스크립트 스크립트는 2011년 6월 9일 목요일 오전 9시 47분 27초 CLT에 시작되었습니다. spl62 lepl: ls^M ^[[0m^[[00madd-licence.sed^[[0m ^[[00;32mbuild-example.sh^[[0m ^[[00mcommit-test^[[0m ^[[00;32mpush-docs.sh) ] ^[[0m^m ^[[00;32madd-licence.sh^[[0m ^[[00;32mbuild.sh^[[0m ^[[00mdelete-licence.sed^[[0m ^[[00msetup.py^[[0m^M) ] ^[[01;34masn^[[0m ^[[00;32mbuild-test.sh^[[0m ^[[00;32mdelete-licence.sh^[[0m ^[[01;34msrc^[[0m^M) ] ^[[00;32mbuild-doc.sh^[[0m ^[[00;32mclean^[[0m ^[[01;34mdoc-src^[[0m ^[[00mtest.ini^[[0m^M] spl62 lepl: 종료^M 스크립트는 2011년 6월 9일 목요일 오전 9시 47분 29초 CLT에 완료되었습니다. spl62 tmp: col -b < 타이프스크립트 스크립트는 2011년 6월 9일 목요일 오전 9시 47분 27초 CLT에 시작되었습니다. spl62 lepl: ls 0m00madd-licence.sed0m 00;32mbuild-example.sh0m 00mcommit-test0m 00;32mpush-docs.sh0m 00;32madd-licence.sh0m 00;32mbuild.sh0m 00mdelete-licence.sed0m 00msetup.py0m 01;34masn0m 00;32mbuild-test.sh0m 00;32mdelete-licence.sh0m 01;34msrc0m 00;32mbuild-doc.sh0m 00;32mclean0m 01;34mdoc-src0m 00mtest.ini0m spl62 lepl:종료 스크립트는 2011년 6월 9일 목요일 오전 9시 47분 29초 CLT에 완료되었습니다.
답변1
다음 스크립트는 모든 ANSI/VT100/xterm 제어 시퀀스를 필터링해야 합니다(기준:ctseq). 최소한의 테스트 후 과소 또는 과소 일치하는 항목을 보고해 주세요.
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ \e[ #%()*+\-.\/]. |
\e\[ [ -?]* [@-~] | # CSI ... Cmd
\e\] .*? (?:\e\\|[\a\x9c]) | # OSC ... (ST|BEL)
\e[P^_] .*? (?:\e\\|\x9c) | # (DCS|PM|APC) ... ST
\e. //xg;
print;
}
알려진 문제:
- 잘못된 시퀀스에 대해 불평하지 마세요. 이는 이 스크립트의 목적이 아닙니다.
- DCS/PM/APC/OSC에 대한 여러 줄 문자열 매개변수는 지원되지 않습니다.
- 128-159 범위의 바이트는 제어 문자로 구문 분석될 수 있지만 거의 사용되지 않습니다. 이는 비ASCII 제어 문자를 구문 분석하는 버전입니다(이로 인해 UTF-8을 포함한 일부 인코딩에서 비ASCII 텍스트가 깨집니다).
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ \e[ #%()*+\-.\/]. |
(?:\e\[|\x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:\e\]|\x9d) .*? (?:\e\\|[\a\x9c]) | # OSC ... (ST|BEL)
(?:\e[P^_]|[\x90\x9e\x9f]) .*? (?:\e\\|\x9c) | # (DCS|PM|APC) ... ST
\e.|[\x80-\x9f] //xg;
print;
}
답변2
업데이트 중자일스의 대답캐리지 리턴을 제거하고 이전 문자의 백스페이스 삭제를 수행하는 것도 가능합니다. 이 두 가지 모두 Cygwin에서 TypeScript를 생성할 때 중요합니다.
#!/usr/bin/perl
while (<>) {
s/ \e[ #%()*+\-.\/]. |
\r | # Remove extra carriage returns also
(?:\e\[|\x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:\e\]|\x9d) .*? (?:\e\\|[\a\x9c]) | # OSC ... (ST|BEL)
(?:\e[P^_]|[\x90\x9e\x9f]) .*? (?:\e\\|\x9c) | # (DCS|PM|APC) ... ST
\e.|[\x80-\x9f] //xg;
1 while s/[^\b][\b]//g; # remove all non-backspace followed by backspace
print;
}
답변3
하나 있다ansi2txt
colorized-logs
Ubuntu 패키지의 명령입니다. ANSI 색상 코드를 제거하는 데는 효과적이지만 텍스트를 내보내는 데 의해 생성되는 진행률 표시줄 ^H
이나 ^M
문자를 오버레이하는 것과 같은 작업은 처리하지 않습니다. col -b
다룰수있다그것들이므로 최상의 결과를 얻으려면 두 가지를 결합할 수 있습니다.
cat typescript | ansi2txt | col -b
답변4
cat typescript | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > typescript-processed