Linux 终端中特定单词出现时为其着色

问题描述 投票:0回答:3

我的终端中运行着一堆脚本(并且我无法编辑它们),它们将消息输出到终端。我希望我的终端能够自动为输出中的特定单词着色。

例如,某些脚本在测试失败时会输出

FAIL
。如何配置终端以在该特定单词出现时将其着色为特定颜色(例如红色)。

linux colors terminal
3个回答
19
投票

自己为单词着色可能比让终端为您着色更容易。如果您无法编辑创建输出的脚本,您可以通过其他方式过滤它们吗?

最有可能在规模可用的一端,您可以通过管道输出

grep

tail -F logfile | grep --color -P "FAIL|"

这匹配“FAIL”或“”,并突出显示字符串的匹配部分。

您可以进一步使用更专业的东西,例如这篇博文中所述。


1
投票

要对命令的文本输出进行着色,可以尝试将命令的输出通过管道传输到 sed 中,如下所示:

yourcommand | sed -e 's/FAIL/^[[01;31mFAIL^[[00m/g' -e 's/SUCCESS/^[[01;32mSUCCESS^[[00m/g'

还可以将这些替换规则放入文本文件(例如 colorize.sed)并使用以下内容:

yourcommand | sed -f colorize.sed

这将允许将不同的颜色分配给不同的匹配字符串。 请注意,在我的示例中,“^[”表示转义字符,而不是后面跟方括号的克拉。可以通过键入 Ctrl-V 然后按转义键将转义字符输入到规则中。

这些 tty 代码可用的颜色/效果如下:

前景色:黑色=30,蓝色=34,青色=36,绿色=32,紫色=35,红色=31,白色=37,黄色=33

背景颜色:黑色=40,蓝色=44,青色=46,绿色=42,紫色=45,红色=41,白色=47,黄色=43

效果:正常=00、粗体=01、暗淡=02、下划线=04、闪烁=05、反转=07、隐藏=08

这些也可以像我一样与分号组合(即 01;31 变为粗体红色)。

请注意,需要使用“^[00m”代码来禁用之前的颜色/效果,否则颜色/效果将在匹配字符串之后保留。另请注意,某些效果在某些终端模拟器上不起作用(或如我所描述的那样起作用)。

我希望我不只是重复别人已经说过的话,因为我没有阅读整个讨论线程。


0
投票

如果您的 linux/unix 风格中安装的 grep 命令没有 -P 参数,您可以使用:

egrep --color "\b(place_here_what_you_are_looking_for)\b|$"
© www.soinside.com 2019 - 2024. All rights reserved.