【发布时间】:2013-01-07 01:45:23
【问题描述】:
awk -F: '{ printf "%-3s %-2s","\n" $1 $2; }'
如何添加颜色代码? '\e[1;32m'
我尝试添加到 printf,它给我输出字符串而不是颜色代码..
'\e[1;32m' .......
【问题讨论】:
-
该颜色代码是否适用于普通的
echo?
awk -F: '{ printf "%-3s %-2s","\n" $1 $2; }'
如何添加颜色代码? '\e[1;32m'
我尝试添加到 printf,它给我输出字符串而不是颜色代码..
'\e[1;32m' .......
【问题讨论】:
echo?
awk 无法将 '\e' 识别为转义字符的代码。这是一种解决方法(可能存在更优雅的方法):
# Decimal 27 is the ASCII codepoint for the escape character
awk '{ printf "%c[1;32m foo\n", 27 }' <<<foo
【讨论】:
awk 'BEGIN{print "^[[1;33mYELLOW"}'
将以黄色(彩色)打印字符串 YELLOW
注意
第一个 ^[ 你必须输入 ctrl-v 然后 ESC
我会添加一个屏幕截图来显示。
上面的截图显示它在 zsh 和 bash 下工作。
【讨论】:
希望这可以帮助任何寻找答案的人!
如您所见,函数和各种初始化使得编写如下非常简单的打印行成为可能。
print colour("Red")$1colour("Blue")$0colour("None");
对于colour 函数,您可以传入颜色的整数值或名称。它采用以下格式的参数。
colour( <attribute> , <background-colour> , <foreground-colour> )
colour( <background-colour> , <foreground-colour> )
colour( <foreground-colour> )
您可以选择性地提供所需的参数。
function isnumeric(x)
{
return ( x == x+0 );
}
function name_to_number(name, predefined)
{
if (isnumeric(name))
return name;
if (name in predefined)
return predefined[name];
return name;
}
function colour(v1, v2, v3)
{
if (v3 == "" && v2 == "" && v1 == "")
return;
if (v3 == "" && v2 == "")
return sprintf("%c[%dm", 27, name_to_number(v1, fgcolours));
else if (v3 == "")
return sprintf("%c[%d;%dm", 27, name_to_number(v1, bgcolours), name_to_number(v2, fgcolours));
else
return sprintf("%c[%d;%d;%dm", 27, name_to_number(v1, attributes), name_to_number(v2, bgcolours), name_to_number(v3, fgcolours));
}
BEGIN {
# hack to use attributes for just "None"
fgcolours["None"] = 0;
fgcolours["Black"] = 30;
fgcolours["Red"] = 31;
fgcolours["Green"] = 32;
fgcolours["Yellow"] = 33;
fgcolours["Blue"] = 34;
fgcolours["Magenta"] = 35;
fgcolours["Cyan"] = 36;
fgcolours["White"] = 37;
bgcolours["Black"] = 40;
bgcolours["Red"] = 41;
bgcolours["Green"] = 42;
bgcolours["Yellow"] = 43;
bgcolours["Blue"] = 44;
bgcolours["Magenta"] = 45;
bgcolours["Cyan"] = 46;
bgcolours["White"] = 47;
attributes["None"] = 0;
attributes["Bold"] = 1;
attributes["Underscore"] = 4;
attributes["Blink"] = 5;
attributes["ReverseVideo"] = 7;
attributes["Concealed"] = 8;
}
{
print colour("Red")$1colour("Blue")$0colour("None");
}
【讨论】:
\033[?m 正确引用给出颜色:
awk 'BEGIN{ print "\033[34msomething in colour\033[0m";}'
请注意如何在下面取消转义$1:
echo something | awk '{ print "\033[34m"$1" in colour \033[0m";}'
【讨论】:
BDF()
{
#awk 'BEGIN{ print "\033[34msomething in colour\033[0m";}'
#bdf $spool $data $sysout ~ /home/fnsonlh |grep -v avail| awk '{print $5" "$4" "}' | tail -n +2 |tr -d "\012"
bdf $spool $data $sysout ~ /home/fnsonlh |grep -v avail| awk '{if($4 > 89)
{
print "\033[0;31m"$5" "$4"\033[0m "
}
else
{
print "\033[0;32m"$5" "$4"\033[0m "
}}' |tail -n +2 |tr -d "\012"
#"\012 is new line caracter"
echo
#/usr/bin/w -u
uptime
}
#nishant.chawre@gmail.com
【讨论】:
定义两个或你需要的变量
例子:
GREENB='\033[0;41m' #Green Background (Color verde de fondo)
GREEN='\033[0;32m' #Green Text (Color verde en el texto
REDB='\033[0;41m' #Red Background (Color rojo de fondo)
RED='\033[0;31m' #Red text (Color rojo en el texto)
NORMALB='\033[0;49m' #Default background (Color por defecto de fondo)
NORMAL='\033[0m' #Default foreground (Color por defecto del texto)
awk 代码:
echo "This is a test" | awk -vRojo=${RED} -v NC=${NORMAL} '{print Rojo $1, $2, NC $3, $4}'
\e[${ATTRIBUTE};${BACKGROUND_COLOR};${FOREGROUND_COLOR}m
地点:
\e:<Esc> 字符(可以是\e、\033、\x1B)${ATTRIBUTE}:定义文本的风格(普通、粗体/明亮、暗淡、下划线、闪烁、反向、隐藏)。 0 为正常;
${BACKGROUND_COLOR}:定义背景颜色;${FOREGROUND_COLOR}:定义前景颜色;关于 Bash 颜色的更多颜色和信息 here
【讨论】:
GREENB = "\ 033 [0; 41m" 永远不会起作用,因为 bash 中的赋值运算符不能在变量名和变量值之间有空格...所以正确的语法是 GREENB="... 另外,所有变量值内的那些空格将使 awk 失败并出现错误awk: fatal: cannot open file `[0;' for reading (No such file or directory) 所以必须删除它们...我知道您这样做是为了使其更具可读性和更容易理解,但它的语法完全错误...更正