Wednesday, April 27, 2016

AnsiColor

ANSI Color 문법

----------------------------------------------------------------
ANSI 문법: {시작문자}{속성들}{색}{종료문자}
----------------------------------------------------------------
{시작문자}
        \e[

{속성들}
        0   속성없음
        1   도톰하게
        3   이탤릭체
        4   밑줄표시
        5   반짝이게
        7   색깔반전
        8   문자숨김
        9   문자취소선

{색}
        글자색
            30m 검정
            31m 빨강
            32m 초록
            33m 노랑
            34m 파랑
            35m 분홍
            36m 청록
            37m 하얀

        배경색
            40m 검정
            41m 빨강
            42m 초록
            43m 노랑
            44m 파랑
            45m 분홍
            46m 청록
            47m 하얀

        글자색 고강도
            90m 검정
            91m 빨강
            92m 초록
            93m 노랑
            94m 파랑
            95m 분홍
            96m 청록
            97m 하얀

        배경색 고강도
            100m    검정
            101m    빨강
            102m    초록
            103m    노랑
            104m    파랑
            105m    분홍
            106m    청록
            107m    하얀

{종료문자}
        \e[0m

----------------------------------------------------------------
ANSI 예제:
        echo -e "\e[31m빨강\e[0m"
        echo -e "\e[1;4;31m굵은밑줄빨강\e[0m"
----------------------------------------------------------------

ANSI Color 출력 예제

$ echo -e "\e[31m빨강\e[0m"
빨강

$ echo -e "\e[1;4;31m굵은밑줄빨강\e[0m"
굵은밑줄빨강

ANSI Color 출력 쉘스크립트

$ vi ansi_color.bash

#!/bin/bash
#

# ANSI 형식: {시작문자}{속성들}{색}{종료문자}
#
# {시작문자}:
#       \e[
# {속성들}:
#       0   속성없음
#       1   도톰하게
#       3   이탤릭체
#       4   밑줄표시
#       5   반짝이게
#       7   색깔반전
#       8   문자숨김
#       9   문자취소선
#
# {색}:
#       글자색
#           30m 검정
#           31m 빨강
#           32m 초록
#           33m 노랑
#           34m 파랑
#           35m 분홍
#           36m 청록
#           37m 하얀
#
#       배경색
#           40m 검정
#           41m 빨강
#           42m 초록
#           43m 노랑
#           44m 파랑
#           45m 분홍
#           46m 청록
#           47m 하얀
#
#       글자색 고강도
#           90m 검정
#           91m 빨강
#           92m 초록
#           93m 노랑
#           94m 파랑
#           95m 분홍
#           96m 청록
#           97m 하얀
#
#       배경색 고강도
#           100m    검정
#           101m    빨강
#           102m    초록
#           103m    노랑
#           104m    파랑
#           105m    분홍
#           106m    청록
#           107m    하얀
#
# {종료문자}:
#       \e[0m
#
# ANSI 예제:
#       echo -e "\e[31m빨강\e[0m"
#       echo -e "\e[1;4;31m굵은밑줄빨강\e[0m"

normal=0
bold=1
italic=2
underline=3
blink=4
reverse=5
concealed=6
escline=7
color=8
bg_color=9

black=10
red=11
green=12
yellow=13
blue=14
purple=15
cyan=16
white=17

_NAME[black]='검정'
_NAME[red]='빨강'
_NAME[green]='초록'
_NAME[yellow]='노랑'
_NAME[blue]='파랑'
_NAME[purple]='분홍'
_NAME[cyan]='청록'
_NAME[white]='하얀'

# ANSI 접두사
_ANSI_ON='\e['

# ANSI 초기화
_ANSI_OFF='\e[0m'

# 문자 일반
_ANSI_ATTR[normal]='0'

# 문자 도톰
_ANSI_ATTR[bold]='1'

# 문자 이탤릭채
_ANSI_ATTR[italic]='3'

# 문자 밑줄
_ANSI_ATTR[underline]='4'

# 문자 반짝
_ANSI_ATTR[blink]='5'

# 문자색 반전(글자색/배경색 서로 바꿈)
_ANSI_ATTR[reverse]='7'

# 문자 숨김
_ANSI_ATTR[concealed]='8'

# 문자 취소선
_ANSI_ATTR[escline]='9'

# 문자 도톰 제거
_ANSI_RM[bold]='22m'

# 문자 이탤릭체 제거
_ANSI_RM[italic]='23m'

# 문자 밑줄 제거
_ANSI_RM[underline]='24m'

# 문자 반전(글자색/배경색) 제거
_ANSI_RM[reverse]='27m'

# 문자 취소선 제거
_ANSI_RM[escline]='29m'

# 문자 색깔 제거
_ANSI_RM[color]='39m'

# 문자 배경색 제거
_ANSI_RM[bg_color]='49m'

# 글자색을 지정
_ANSI_COLOR[black]='30m'            # 검정
_ANSI_COLOR[red]='31m'              # 빨강
_ANSI_COLOR[green]='32m'            # 초록
_ANSI_COLOR[yellow]='33m'           # 노랑
_ANSI_COLOR[blue]='34m'             # 파랑
_ANSI_COLOR[purple]='35m'           # 분홍
_ANSI_COLOR[cyan]='36m'             # 청록
_ANSI_COLOR[white]='37m'            # 하얀

# 배경색을 지정
_ANSI_COLOR_BG[black]='40m'         # 검정
_ANSI_COLOR_BG[red]='41m'           # 빨강
_ANSI_COLOR_BG[green]='42m'         # 초록
_ANSI_COLOR_BG[yellow]='43m'        # 노랑
_ANSI_COLOR_BG[blue]='44m'          # 파랑
_ANSI_COLOR_BG[purple]='45m'        # 분홍
_ANSI_COLOR_BG[cyan]='46m'          # 청록
_ANSI_COLOR_BG[white]='47m'         # 하얀

# 글자색을 고강도로 지정(High Intensity)
_ANSI_COLOR_HI[black]='90m'         # 검정
_ANSI_COLOR_HI[red]='91m'           # 빨강
_ANSI_COLOR_HI[green]='92m'         # 초록
_ANSI_COLOR_HI[yellow]='93m'        # 노랑
_ANSI_COLOR_HI[blue]='94m'          # 파랑
_ANSI_COLOR_HI[purple]='95m'        # 분홍
_ANSI_COLOR_HI[cyan]='96m'          # 청록
_ANSI_COLOR_HI[white]='97m'         # 하얀

# 배경색을 고강도로 지정(High Intensity)
_ANSI_COLOR_HI_BG[black]='100m'     # 검정
_ANSI_COLOR_HI_BG[red]='101m'       # 빨강
_ANSI_COLOR_HI_BG[green]='102m'     # 초록
_ANSI_COLOR_HI_BG[yellow]='103m'    # 노랑
_ANSI_COLOR_HI_BG[blue]='104m'      # 파랑
_ANSI_COLOR_HI_BG[purple]='105m'    # 분홍
_ANSI_COLOR_HI_BG[cyan]='106m'      # 청록
_ANSI_COLOR_HI_BG[white]='107m'     # 하얀

# 일반적인 글자색 출력
for color in black red green yellow blue purple cyan white
do
    echo -e -n "[${_ANSI_COLOR[color]}: ${_ANSI_ON}${_ANSI_COLOR[color]}${_NAME[color]}${_ANSI_OFF}] "
done
echo

# 일반적인 배경색 출력
for color in black red green yellow blue purple cyan white
do
    echo -e -n "[${_ANSI_COLOR_BG[color]}: ${_ANSI_ON}${_ANSI_COLOR_BG[color]}${_NAME[color]}${_ANSI_OFF}] "
done
echo

# 속성별 글자 출력
for color in black red green yellow blue purple cyan white
do
    for attr in bold italic underline blink reverse concealed escline
    do
        echo -e -n "[${_ANSI_ATTR[attr]};${_ANSI_COLOR[color]}: ${_ANSI_ON}${_ANSI_ATTR[attr]};${_ANSI_COLOR[color]}${_NAME[color]}${_ANSI_OFF}] "
    done
    echo
done

$ bash ansi_color.bash

enter image description here

기타

vi에서 ANSI 쓰기

$ vi ansi.txt

^[[0;31m빨강^[[0m

$ cat ansi.txt
빨강

vi 에서 \e 쓰기(”’^[”’)

입력모드(i) -> Ctrl + v + ESC



Post a Comment