我有这个:
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 '[^=]*='