화면 로그를 html로 변환

화면 로그를 html로 변환

터미널 창에서 수행된 작업을 기록하고 즉시 로그를 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\])')

if command not in 'mMA':

루프에서 중복된 항목을 제거하는 것이 가장 쉽습니다. 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

관련 정보