col이 잘못된 출력을 생성함

col이 잘못된 출력을 생성함

script출력을 더 읽기 쉬운 형식으로 후처리하려고 합니다 .스크립트 출력에서 ​​제어 문자(콘솔 코드/색상 포함) 제거col, 그러나 이것이 항상 작동하는 것은 아니라는 것을 알았습니다 .

예를 들어,

$ cat -v uncolored 
foo^H^H^Hbfoo^H^H^Hafoo^H^H^Hr^M
$ col -bp < uncolored
baroo

왜 직접 col -bp출력 하지 않습니까 bar? 여분의 2는 어디 o에서 왔습니까?

답변1

^H이 경우에는 dec/hex 8 또는 oct 10 또는 라고도 하는 백스페이스 키입니다 \b. 예를 들어 다음과 같습니다.

$ printf 'bravo\10\10X'
braXo

커서를 다시 2로 옮겼지만 문자 하나만 썼습니다 v. 즉, 덮어쓰지 않았 o으므로 그대로 남아 있습니다. 나머지 문자를 제거하려면 일반적으로 공백 문자로 덮어써야 합니다.

$ printf 'bravo\10\10X '
braX

http://wikipedia.org/wiki/Backspace#%5eH

답변2

깔끔한 해결 방법은 다음과 같습니다.

sed -re ':b; s,[^\x08]\x08,,g; tb'

  • :b: 라벨b
  • s,[^\x08]\x08,,g: 백스페이스가 아닌 문자를 백스페이스 문자와 쌍으로 만들고 둘 다 제거합니다.
  • tbs: 이전 명령이 어떤 작업을 수행 한 경우 레이블로 다시 이동합니다.b

관련 정보