ANSI2TXT 텍스트 파일안의 안시 제어코드 제거

이 글에서의 ANSI는 제어 코드를 사용하여 색상과 그림을 표시하는 방식을 말한다.

주로 DOS와 같은 터미널 환경, PC통신 등에서 간단한 그래픽 화면을 표기하기 위해 사용되었지만 관련된 결과물을 살펴보면 결코 가볍지 않다. macOS의 터미널을 화려하게 꾸미는데에도 ANSI가 사용된다. 터미널 상에서 컬러풀한 텍스트 형태로 무언가 표시되고 있다면 ANSI에 의한 결과물일 가능성이 크다.

ANSI 제어코드는 이곳에서 확인할 수 있다. ANSI로 작성된 결과물들을 이곳에서 확인할 수 있으며 구글에서 ansi art로 검색해도 상당한 수준의 결과물들을 쉽게 찾아볼 수 있다.

내 경우, 간혹 터미널 상에서의 작업을 ‘script’ 명령을 사용하여 로그를 남기는 경우가 있는데 ANSI 제어 코드가 함께 기록되어 지저분하게 보이는 일들이 있다. ANSI 제어코드만을 쉽게 없애는 도구들이 많을거라 생각했는데 막상 찾아보니 눈에 잘 띄지 않아서 내가 사용해온 ansi2text 프로그램을 소개한다.

아주 오래전에 작성된 프로그램이지만 빌드와 동작에는 문제가 없다.

macOS에서도 build 과정에서 일부 warning이 발생되지만 동작에는 문제 없다.

/tmp/ansi » tar xvzf ansi2txt-0.2.2.tar.gz                                       
x ansi2txt-0.2.2/
x ansi2txt-0.2.2/ansi2txt.c
x ansi2txt-0.2.2/Makefile
x ansi2txt-0.2.2/README
x ansi2txt-0.2.2/ansi2txt.1.gz
x ansi2txt-0.2.2/CHANGELOG
/tmp/ansi » cd ansi2txt-0.2.2
/tmp/ansi/ansi2txt-0.2.2 » make
gcc -O2   -c -o ansi2txt.o ansi2txt.c
ansi2txt.c:100:35: warning: operator '>>' has lower precedence than '+'; '+' will be evaluated first
    [-Wshift-op-parentheses]
memset(out_col + start, m_white + m_black >> 4, len);   // fg white, bg black
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/secure/_string.h:77:33: note:
...
10 warnings generated.
gcc -o ansi2txt ansi2txt.o

빌드된 실행 파일에 인자로 입력된 파일의 ANSI 코드를 제거한 내용을 출력으로 표시한다.

/tmp/ansi/ansi2txt-0.2.2  $ ./ansi2txt log
ansi2txt.c:100:35: warning: operator '>>' has lower precedence than '+'; '+' will be evaluated first
    [-Wshift-op-parentheses]
memset(out_col + start, m_white + m_black >> 4, len);   // fg white, bg black
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/secure/_strin
g.h:77:33: note:
    expanded from macro 'memset'
              __builtin___memset_chk (dest, __VA_ARGS__, __darwin_obsz0 (dest))
ANSI 제어코드가 포함된 로그 파일
ANSI 제어코드 제거

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다