如何为特定字符序列更改bash输出的颜色

5
我正在处理一个项目,需要从终端启动一些服务器并且它会显示所有服务器日志,不同的事件发生时(轮询消息、API调用等),都有相应的日志。在测试新功能期间,我需要快速地查看这些日志,以确保一切按预期工作。我想知道是否有可能对某些特定的消息进行颜色编码,以便我可以更快速地识别它们。
例如,我想要确定特定的 API 调用在哪里发生了。类似于“INFO:root:default: PUT /api/v0.1/something/something/mashedpotatoes”。是否有可能在这种消息出现时改变其颜色?

可能是 https://dev59.com/gYvda4cB1Zd3GeqPaH4R#30578079 的重复问题。 - cdarke
1个回答

8
您可以使用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

并且像这样使用它:

PURPLE='\033[0;35m'
NC='\033[0m' # No Color
echo "${PURPLE}INFO:root:default: PUT /api/v0.1/something/something/mashedpotatoes${NC}\n"

该代码会将文本打印成紫色。


我不确定这是否是我要找的,如果我错了,请纠正我。听起来像是我需要将其添加到日志源中?基本上,我正在寻找可以添加到我的.bash_profile中的东西,它将在日志出现时解析它们,并在它们匹配我的字符序列时对它们进行着色。如果我将其添加到我的.bash_profile中,我认为这只会在打开终端时打印该序列。 - MJDonns
@Mike 当你读取日志并在屏幕上显示它们时,你可以通过sed、awk等方式将这些代码添加到输出中。 - Etan Reisner
1
最好使用tput来获取这些颜色的代码,而不是硬编码它们。没有什么能保证这些代码适用于给定的终端。 - Etan Reisner
在我的情况下,需要使用 echo -e - Tim Malich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接