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
답변2
깔끔한 해결 방법은 다음과 같습니다.
sed -re ':b; s,[^\x08]\x08,,g; tb'
:b
: 라벨b
s,[^\x08]\x08,,g
: 백스페이스가 아닌 문자를 백스페이스 문자와 쌍으로 만들고 둘 다 제거합니다.tb
s
: 이전 명령이 어떤 작업을 수행 한 경우 레이블로 다시 이동합니다.b