我有一个多行字符串,用于在 bash 脚本中打印。
docstring="
Headings
-H, -H CNT, -H=CNT, -HCNT, --heading CNT, --heading=CNT
Warnings
-W, -W CNT, -W=CNT, -WCNT, --warning CNT, --warning=CNT
Errors
-E, -E CNT, -E=CNT, -ECNT, --error CNT, --error=CNT"
echo "$docstring"
我想创建一个函数,它接受这个字符串并以彩色打印以-
or开头的行{-
。
因此,以下将被着色
-H, -H CNT, -H=CNT, -HCNT, --heading CNT, --heading=CNT
-W, -W CNT, -W=CNT, -WCNT, --warning CNT, --warning=CNT
-E, -E CNT, -E=CNT, -ECNT, --error CNT, --error=CNT
使用 GNU sed的一种方法,假设字符串不包含
\
,`
,"
也不包含$
字符:用法:
要选择另一种颜色,请检查:
注意事项:
不要按原样用作 CGI 脚本,将其保密,因为正如 Stephane Chazelas 所指出的,您可以运行任意命令。这是在受信任的环境中使用。或者制作一种过滤器来清理输入字符串
与 GNU 实现
grep
或兼容:这是
grep
对以任意数量的空白字符开头的行执行 ping 命令,然后是可选{
的,-
然后是任意数量的字符,或者只是行的开头,只要输出到终端设备(假设显示它),就会对匹配的内容进行着色在终端上,那些解释那些转义序列的)。更改为--color=always
以添加着色,即使输出未转到终端设备。使用哪些属性和颜色(默认情况下为粗体红色)是通过
$GREP_COLORS
环境变量(以前称为$GREP_COLOR
)控制的。grep
例如GREP_COLORS='mt=1;41;33' grep...
,调用m
atchedt
ext 为粗体,黄色前景,红色背景。以红色打印匹配行的
printred
函数可能如下所示:在不依赖 GNUisms 的情况下突出显示这些行的另一种方法是用于
sed
在匹配行周围添加 ANSI 转义序列:或者
perl
代替sed
: