如何使用 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 '[^=]*='

相关内容