Answers:
这是一个小脚本。将其另存为color
您的目录中$PATH
(例如,~/bin
如果在您的目录中$PATH
):
#!/usr/bin/env perl
use strict;
use warnings;
use Term::ANSIColor;
my $color=shift;
while (<>) {
print color("$color").$_.color("reset");
}
然后,通过脚本传递文本,给出.
要匹配的图案并指定颜色:
支持的颜色取决于终端的功能。有关详细信息,请参阅文件中的Term::ANSIColor
包。
rgb001
,rgb123
等功能。有关更多详细信息,请参见perldoc.perl.org/Term/ANSIColor.html#Supported-Colors。
您将tput
为此使用:
tput setaf 1
echo This is red
tput sgr0
echo This is back to normal
这可以用来构建管道:
red() { tput setaf 1; cat; tput sgr0; }
echo This is red | red
基本颜色分别是黑色(0),红色(1),绿色,黄色,蓝色,洋红色,青色和白色(7)。您可以在手册terminfo(5)
页中找到所有详细信息。
与zsh
:
autoload colors; colors
for color (${(k)fg})
eval "$color() {print -n \$fg[$color]; cat; print -n \$reset_color}"
接着:
$ echo "while" | blue
while
(如评论中所述,如果有,请改用tput
)
使用bourne shell和echo
(内置)命令了解ANSI转义,\e
并带有以下-e
选项:
black() { IFS= ; while read -r line; do echo -e '\e[30m'$line'\e[0m'; done; }
red() { IFS= ; while read -r line; do echo -e '\e[31m'$line'\e[0m'; done; }
green() { IFS= ; while read -r line; do echo -e '\e[32m'$line'\e[0m'; done; }
yellow() { IFS= ; while read -r line; do echo -e '\e[33m'$line'\e[0m'; done; }
blue() { IFS= ; while read -r line; do echo -e '\e[34m'$line'\e[0m'; done; }
purple() { IFS= ; while read -r line; do echo -e '\e[35m'$line'\e[0m'; done; }
cyan() { IFS= ; while read -r line; do echo -e '\e[36m'$line'\e[0m'; done; }
white() { IFS= ; while read -r line; do echo -e '\e[37m'$line'\e[0m'; done; }
echo ' foo\n bar' | red
或者,更通用的shell脚本(例如/usr/local/bin/colorize
):
#!/bin/sh
usage() {
echo 'usage:' >&2
echo ' some-command | colorize {black, red, green, yellow, blue, purple, cyan, white}' >&2
exit 1
}
[ -z "$1" ] && usage
case $1 in
black) color='\e[30m' ;;
red) color='\e[31m' ;;
green) color='\e[32m' ;;
yellow) color='\e[33m' ;;
blue) color='\e[34m' ;;
purple) color='\e[35m' ;;
cyan) color='\e[36m' ;;
white) color='\e[36m' ;;
*) usage ;;
esac
IFS=
while read -r line; do
echo -e $color$line'\e[0m'
done
IFS=
需要防止空白调整(有关详细信息,请参见POSIX)。
tput
。