터미널 창에서 수행된 작업을 기록하고 즉시 로그를 html로 변환하고 싶습니다.
나는 명령 스크립트/화면을 시도했습니다 +ansi2html, 그러나 결과는 완벽하지 않습니다. 줄 편집을 위한 이스케이프 시퀀스가 올바르게 처리되지 않으므로 생성된 HTML에는 이전 버전과 새 버전의 줄이 혼합되어 있습니다. 따라서 터미널의 출력이 다음과 같다면
$> echo Original text
Original text
$> echo Other
Other
생성된 HTML은
$> 원본 텍스트를 에코합니다. 원래의 $> 다른 텍스트를 에코합니다. 다른
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
답변1
문제는 Perl 스크립트(불필요한)가 아니라 ansi2html
불완전하다는 것입니다.
로그 파일에는 텍스트를 인쇄하는 내용이 표시되고
- 줄의 나머지 부분을 지우려면 이스케이프 시퀀스 추가를 반복하세요.
\E[K
- 또는 백스페이스 키를 추가하세요.
에서 ansi2html
스크립트는 이스케이프 시퀀스를 찾은 다음 찾은 모든 이스케이프 시퀀스를 무시합니다(일부 제외).
self.ansi_codes_prog = re.compile('\033\\\[' '(\[\\d;\]*)' '(\[a-zA-z\])')
루프에서 중복된 항목을 제거하는 것이 가장 쉽습니다. ansi2html
귀하의 예에서 문제를 해결하는 대체 스크립트는 다음과 같습니다 .
#!/usr/bin/perl -w
while (<>) {
my $save = "";
while ( $save ne $_ ) {
$save = $_;
s/[^\010]\010\e\[K//;
}
$save = "";
while ( $save ne $_ ) {
$save = $_;
s/[^\010]\010//;
}
s/\e\[\?[;0-9]*[\100-\176]//g;
s/\e\][^\a]*\a//g;
print;
}
그리고 (라고 부르세요 filterit
) 다음과 같이 사용하세요:
./filterit < 1.log | ansi2html >1.html