제어 문자로 구문 분석


3

화면에 쓸 것으로 예상되는 명령의 출력을 구문 분석하려고합니다. 원점으로 이동 제어 시퀀스 (VT220의 경우 ESC[1;1H) 로 구분 된 데이터가 있습니다 . 마지막 부분 만 필요합니다 (예 : 마지막으로 이동 한 후).

나는이 여러 가지 방법 (주로 awk와 sed)을 시도했지만 문제는 항상 제어 시퀀스의 일부가 쉘뿐만 아니라 프로그램에 특별한 의미를 가지고 있으며 tput의 출력을 대체 할 때 인용 할 수 없다는 것입니다 .

어떤 제안?

편집하다:

다음은 내가 구문 분석하려고하는 예입니다 ( ESC이스케이프 문자입니다).

Page 1; line 1
Page 1; line 2
ESC[1;1HPage 2; line 1
Page 2; line 2
ESC[1;1HPage 3; line 1
Page 3; line 2

프로그램을 실행 한 후 터미널에있을 것입니다 다음을 얻으려고합니다.

Page 3; line 1
Page 3; line 2

구문 분석하려는 실제 텍스트의 예를 들어 주시겠습니까?
terdon

이러한 종류의 작업은 스크립팅 언어로 수행하는 것이 가장 쉽습니다.
dangph

동의한다. 스크립트가 해석하려고 시도하지 않고 제어 순서를 스크립트로 가져 오는 데 어려움이 있습니다.

@bugmenot, 어떤 플랫폼에 있습니까? 2 분 안에 Python 또는 PowerShell에서 스크립트를 사용할 수 있습니다.
dangph

1
어느 부분을 이해하지 못합니까? 잘만되면, 이것은 그것을 정리할 것입니다 : 나는 데이터의 마지막 "페이지"를 얻으려고합니다. 여기서 페이지는 제어 시퀀스 이후의 마지막 부분입니다. 그러나 제어 시퀀스가 ​​실행되는 터미널에 따라 달라질 수 있으므로 제어 시퀀스를 하드 코딩 할 수 없습니다. tput에서 가져와야하지만 명령 대체를 수행 할 때 이스케이프 문자가 올바르게 인용되지 않습니다.

답변:


0

문제를 처리하는 가장 쉬운 방법 :

  1. 모든 제어 순서를 'uuencode -mv'또는 'xxd'로 변환하십시오.
  2. 지금 당신은 awk에 의해 평소와 같이 텍스트 처리를 할 수 있습니다
  3. 결국 'uudecode -o-'또는 'xxd -revert'로 다시 변환하십시오.

bbe-바이너리 파일을위한 sed-like 편집기

더 구체적인 답변이 필요한 경우 더 구체적인 프로그램 샘플이 필요합니다.


당신은 내가 ... 위의 몇 가지를 추가 :-) 그것을 검색 할 위치를 알고 그래, 그것은 간단합니다
sparkie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.