我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
当前回答
可以使用以下ANSI转义码:
Black 0;30 Dark Gray 1;30
Red 0;31 Light Red 1;31
Green 0;32 Light Green 1;32
Brown/Orange 0;33 Yellow 1;33
Blue 0;34 Light Blue 1;34
Purple 0;35 Light Purple 1;35
Cyan 0;36 Light Cyan 1;36
Light Gray 0;37 White 1;37
然后在脚本中这样使用它们:
# .---------- constant part!
# vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"
用红色印着爱。
从@james lim的评论中,如果您使用echo命令,请确保使用-e标志来允许反斜杠转义。
# .---------- constant part!
# vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
echo -e "I ${RED}love${NC} Stack Overflow"
(使用echo时不要添加“\n”,除非您想添加额外的空行)
其他回答
为了可读性
如果要提高代码的可读性,可以先回显字符串,然后使用sed添加颜色:
echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/'
我写了swag就是为了实现这一点。
你可以这样做
pip install swag
现在,您可以通过以下方式将所有转义命令作为txt文件安装到给定目标:
swag install -d <colorsdir>
或者更容易通过:
swag install
这将把颜色安装到~/.colors。
您可以这样使用它们:
echo $(cat ~/.colors/blue.txt) This will be blue
或者这样,我觉得更有趣:
swag print -c red -t underline "I will turn red and be underlined"
在ascinema上查看!
echo -e "\033[31m Hello World"
[31m控制文本颜色:
30-37套前景色40-47套背景色
这里可以找到更完整的颜色代码列表。
最好将字符串末尾的文本颜色重置回\033[0m。
其他的答案已经很好地解释了如何做到这一点。我仍然缺少的是对颜色代码的一个精心安排的概述。维基百科文章“ANSI转义码”对此非常有用。然而,由于颜色通常可以在每个终端中进行配置,并且看起来不同,所以我更希望有一个可以在终端中调用的功能。为此,我创建了以下函数来显示颜色表,并提醒我如何设置它们(排列方式受wiki文章的启发)。例如,您可以将它们加载到.bashrc/.zshrc中,或将它们作为脚本放在某处。
256色
由bash/zsh脚本生成:
function showcolors256() {
local row col blockrow blockcol red green blue
local showcolor=_showcolor256_${1:-bg}
local white="\033[1;37m"
local reset="\033[0m"
echo -e "Set foreground color: \\\\033[38;5;${white}NNN${reset}m"
echo -e "Set background color: \\\\033[48;5;${white}NNN${reset}m"
echo -e "Reset color & style: \\\\033[0m"
echo
echo 16 standard color codes:
for row in {0..1}; do
for col in {0..7}; do
$showcolor $(( row*8 + col )) $row
done
echo
done
echo
echo 6·6·6 RGB color codes:
for blockrow in {0..2}; do
for red in {0..5}; do
for blockcol in {0..1}; do
green=$(( blockrow*2 + blockcol ))
for blue in {0..5}; do
$showcolor $(( red*36 + green*6 + blue + 16 )) $green
done
echo -n " "
done
echo
done
echo
done
echo 24 grayscale color codes:
for row in {0..1}; do
for col in {0..11}; do
$showcolor $(( row*12 + col + 232 )) $row
done
echo
done
echo
}
function _showcolor256_fg() {
local code=$( printf %03d $1 )
echo -ne "\033[38;5;${code}m"
echo -nE " $code "
echo -ne "\033[0m"
}
function _showcolor256_bg() {
if (( $2 % 2 == 0 )); then
echo -ne "\033[1;37m"
else
echo -ne "\033[0;30m"
fi
local code=$( printf %03d $1 )
echo -ne "\033[48;5;${code}m"
echo -nE " $code "
echo -ne "\033[0m"
}
16种颜色
由bash/zsh脚本生成:
function showcolors16() {
_showcolor "\033[0;30m" "\033[1;30m" "\033[40m" "\033[100m"
_showcolor "\033[0;31m" "\033[1;31m" "\033[41m" "\033[101m"
_showcolor "\033[0;32m" "\033[1;32m" "\033[42m" "\033[102m"
_showcolor "\033[0;33m" "\033[1;33m" "\033[43m" "\033[103m"
_showcolor "\033[0;34m" "\033[1;34m" "\033[44m" "\033[104m"
_showcolor "\033[0;35m" "\033[1;35m" "\033[45m" "\033[105m"
_showcolor "\033[0;36m" "\033[1;36m" "\033[46m" "\033[106m"
_showcolor "\033[0;37m" "\033[1;37m" "\033[47m" "\033[107m"
}
function _showcolor() {
for code in $@; do
echo -ne "$code"
echo -nE " $code"
echo -ne " \033[0m "
done
echo
}
以下是我最终使用sed的结果
echo " [timestamp] production.FATAL Some Message\n" \
"[timestamp] production.ERROR Some Message\n" \
"[timestamp] production.WARNING Some Message\n" \
"[timestamp] production.INFO Some Message\n" \
"[timestamp] production.DEBUG Some Message\n" | sed \
-e "s/FATAL/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/ERROR/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/WARNING/"$'\e[33m'"&"$'\e[m'"/" \
-e "s/INFO/"$'\e[32m'"&"$'\e[m'"/" \
-e "s/DEBUG/"$'\e[34m'"&"$'\e[m'"/"
打印方式如下: