对终端的所有输出进行着色

对终端的所有输出进行着色

有没有办法让我的终端的所有输出都以个性化的方式着色?例如:如果我发出命令:sudo apt-get update- 我将得到一列文本,并且我想要的是如果此文本中有任何像“ERROR”这样的字词则将其着色为红色,并且将任何像“DONE”或“FINISHED”这样的字词着色为绿色。

这只是一个例子,我知道这可能会搞乱其他程序的彩色输出,只是好奇这是否可能。

我目前正在使用 ZSH,但接受每个终端仿真器的答案。

答案1

您可以使用sed将单词边界分隔的“ERROR”、“DONE”和“FINISHED”字符串替换为括在ANSI 颜色转义序列(为了方便起见,您可以为该命令添加别名~/.bashrc;正如您所见,这在 Zsh 中有效,但由于它是解释转义序列的终端,因此它可以在运行在 ANSI / VT100 兼容终端中的任何 shell 中工作):

sudo apt-get update |& sed 's/\bERROR\b/\x1B[1;31m&\x1B[0m/; s/\bDONE\b/\x1B[1;32m&\x1B[0m/; s/\bFINISHED\b/\x1B[1;34m&\x1B[0m/'
sudo apt-get update |&
    sed '
        s/\bERROR\b/\x1B[1;31m&\x1B[0m/
        s/\bDONE\b/\x1B[1;32m&\x1B[0m/
        s/\bFINISHED\b/\x1B[1;34m&\x1B[0m/
    '

截屏

相关内容