GNU Screen의 screenlog에서 이스케이프 문자 제거


14

GNU Screen의 출력 파일에서 ESC 시퀀스를 제거 할 수 있습니까? 색상, 탭 및 기타 이스케이프 문자와 같은 것은 로그 파일로 들어가서 해독하기가 어렵습니다.

Google & Co. 박사를 시도하고 매뉴얼을 읽었지만 적절한 것을 찾을 수 없었습니다 ...

아마도 내가 간과 한 것 같아?

답변:


11

이 Perl 매직 조각을 사용해보십시오.

perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0

고마워요-굉장합니다! 여전히 ^ G와 ^ M 문자가 있지만 훨씬 더 읽기
쉽습니다

1
식에 추가했습니다.
whitequark

하나의 라이너에 몇 개의 ASCII 얼굴이 있는지 궁금합니다. 나는 약 20 세를 멈췄다.
John T

4
물론 나는 그것들을 세는 다른 하나의 라이너를 쓸 수 있습니다.
whitequark

10

ansifilter를 사용하십시오.

ansifilter screenlog.txt > screenlog.txt.clean

모든 리눅스 시스템이나 설치해야 할 것입니까?
Journeyman Geek

@JourneymanGeek 그것은 우분투 저장소에도 포함되어 있지 않으므로 정확하게 인기가 없다고 말하고 싶습니다. 프로젝트 페이지에서 직접 가져 와서 직접 실행 / 컴파일 해야하는 것처럼 보입니다. 정확히에게 인기있는 프로그램 호출을 wouldnt ansifilter.sourceforge.net
사이먼 시핸

나는 OSX를 사용 brew install ansifilter하고 있으며 매력처럼 작동했습니다.
thekingoftruth

1
배포판에 대한 2012 년 의견 이후로 이것이 어떻게 바뀌 었는지 모르겠지만, 현재 Fedora 릴리스 (22)의 저장소에서이를 발견했습니다.
dmh

10

less의 -r 또는 -R 옵션도 시도하십시오.

less -r screenlog.0

좋은 해결책. 모든 ^ H (삭제) 문자를 올바르게 처리하고 ^ M cruft없이 진행률 표시 줄을 표시하며 색상 프롬프트를 유지합니다! 물론 때때로 로그를 표시하는 것만으로는 충분하지 않습니다.
Quantum7

5

screenlog.n에서 세션을 캡처하면 파일을 터미널에 넣은 다음 screen의 hardcopy 명령을 사용하여 cat 출력을 파일로 덤프 할 수 있습니다. 결과는 이스케이프 시퀀스가없는 깨끗한 출력을 제공합니다.

유일한 'gotcha'는 하드 카피가 스크롤 백 버퍼의 모든 것을 캡처하고 스크롤 백 버퍼에 캡처하려는 내용 만 포함하는지 확인하는 것 같습니다.

1. $ screen
2. $ cd /path/to/screenlog.n directory/
3. $ wc -l screenlog.n 
4. $ screen -X scrollback 245 # 245 is the number of lines found from your wc command + 5 
5. $ cat screenlog.n
6. $ screen -X hardcopy -h screenlog.n.cleaned 

-h를 사용하면 즉각적인 내용뿐만 아니라 전체 스크롤 백 기록을 캡처 할 수 있습니다.

screenlog.n.cleaned 파일에는 cat 출력의 하드 카피가 포함되며 이스케이프 시퀀스는 포함되지 않습니다.


매우 깔끔 합니다. 다른 모든 perl / sed / python one-liner가 실패했습니다. 더 적은 -r / more가 내 파일을 직접 처리한다고 생각할 때 매우 실망 스럽습니다. 한 가지 제안 wc -l이 저에게 효과가 없었습니다. 28226을 반환했지만 실제로는 33031이 필요했습니다.
malat

4

내가 사용하는 strings화면 로그 읽을 수 있도록 명령을 사용합니다. 데비안에서는 binutils 패키지의 일부입니다.

매뉴얼 페이지에 따르면 :

문자열-객체 또는 다른 이진 파일에서 인쇄 가능한 문자열을 찾습니다.


2

screen사용자 인 경우 Joel Verks의 게시물에서 제안한 화면 하드 카피 솔루션은 다음과 같이 큰 스크롤 백이 정의되어 있다고 가정하면 가장 효과적입니다 .screenrc.

defscrollback 10000

그럼 당신은 할 것입니다 :

  1. screenlog파일을 표시하십시오 .

    $ cat screenlog.<screen_window_num>
    
  2. hardcopy -h현재 창 내용과 스크롤 백 버퍼를 hardcopy.#파일 에 저장 하려면 (화면 맨 페이지 참조)를 사용 하십시오.

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.