AWK를 사용하여 색상을 에코하는 방법

AWK를 사용하여 색상을 에코하는 방법

나는 이것을 가지고있다:

cm_env(){
 env | grep 'cm_' | while read line; do
    echo "$line" | awk -F'=' '{print $1 $2}'
 done;
}

다음과 같이 인쇄하고 싶습니다.

env_var1=this_is_in_blue
env_var2=this_is_in_blue_too
env_var3=this_is_colored_blue

이를 수행하려면 AWK가 아닌 다른 것을 사용해야 합니까?

문제는 큰따옴표가 작동하지 않는 것 같다는 것입니다.

export cm_color_gray='\033[1;30m'
export cm_color_cyan='\033[1;36m'

cm_env(){
 env | grep 'cm_' | while read line; do
    echo "$line" | awk -F'=' '{print $1 $cm_color_cyan $2 $cm_color_no_color}'
 done;
}

나는 이것을 시도했습니다 :

echo "$line" | awk -F'=' "{print \$1 $cm_color_cyan \$2 $cm_color_no_color}"

하지만 나는 다음을 얻습니다.

awk: 1: 예상치 못한 문자 '\'

awk를 사용하여 이를 수행할 수 있는 방법이 있습니까?

답변1

색상을 awk 변수로 전달해야 합니다.

env | awk -v b='\033[1;36m' -v r='\033[0m' -F= '/cm_/{OFS="="; print $1,b$2r}'

또는 tput을 사용하십시오:

env | awk -v b="$(tput setaf 6)" -v r="$(tput sgr0)" -F= '/cm_/{OFS="="; print $1,b$2r}'

답변2

grep이를 사용하여 출력에 색상을 지정할 수도 있습니다 .

env |grep cm_ |grep -o '^[^=]*=[^=]*' |GREP_COLORS="sl=1;36:ms=1;0" grep '[^=]*='

관련 정보