如何在shell中为printf%s的输出着色?
我在printf命令的多行上有一些ASCII艺术,例如:如何在shell中为printf%s的输出着色?,shell,colors,escaping,printf,echo,Shell,Colors,Escaping,Printf,Echo,我在printf命令的多行上有一些ASCII艺术,例如: printf %s ' \ / \ / \/ ' 我想让每一行都有不同的颜色。我已经尝试过明显的\e[31m,但这不起作用,因为我需要printf命令以字符串(%s)的形式打印并忽略反斜杠,因为我的ASCII艺术。 我也试过: r="\e1;[31m" e="\e[0m" a='\ /' b=' \ /' c=' \/' printf $r%s$e "$a" 没有运气。 这可能吗? 谢谢。您可以使用应用颜
printf %s '
\ /
\ /
\/
'
我想让每一行都有不同的颜色。我已经尝试过明显的\e[31m,但这不起作用,因为我需要printf命令以字符串(%s)的形式打印并忽略反斜杠,因为我的ASCII艺术。
我也试过:
r="\e1;[31m"
e="\e[0m"
a='\ /'
b=' \ /'
c=' \/'
printf $r%s$e "$a"
没有运气。
这可能吗?
谢谢。您可以使用应用颜色的命令处理printf的输出。例如
printf %s '
\ /
\ /
\/
/ \
/ \
' | awk 'BEGIN{c=0} {printf "\033[3%dm%s\033[0m\n", 1 + c, $0; c = (c + 1) % 6;}'
给予
分步骤:
- printf命令通过管道(即“|”)将其输出发送到单引号中给出的awk脚本
- 在该脚本中,我使用大括号中的第一个块,在特殊关键字“BEGIN”(执行一次)之后初始化了一个计数器“c”
- 对于awk读取的每一行,执行大括号中的第二个块
- awk使用自己的printf打印转义序列设置颜色,打印文本并重置颜色
- “$0”符号包含整行(不含换行符)
- 我使用了一个表达式来更新每行后面的'c'(“%”是模数 运算符,使“c”的范围从0到5)
#!/bin/bash
RED="\e[0;31m"
GREEN="\e[0;32m"
RESET="\e[0m"
printf "%s $RED%s $GREEN%s $RESET%s\n" BLACK RED GREEN BLACK
这将有助于:
r='\033[31m'
e='\033[0m'
a='\ /'
b=' \ /'
c=' \/'
printf "$r%s$e\n" "$a" "$b" "$c"
谢谢,这很好用。你能给我解释一下awk命令的每一部分都是做什么的吗?我对这一切都很陌生,谢谢。
r='\033[31m'
e='\033[0m'
a='\ /'
b=' \ /'
c=' \/'
printf "$r%s$e\n" "$a" "$b" "$c"