You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按规则为终端输出添加ANSI颜色编码?

实现方案

针对长运行流式输出的my-app,我们可以用awk(推荐)或sed工具,在去除元数据后按规则添加ANSI颜色编码,完美适配实时流式场景。

核心ANSI颜色码

先明确需要用到的终端颜色控制码:

  • 灰色(匹配[+]的文本):\033[90m
  • 黄色(含<s:PocApi的行):\033[33m
  • 浅灰色(含DBG的行):\033[37m
  • 红色(含ERR的行):\033[31m
  • 颜色重置(恢复默认):\033[0m

推荐方案:用awk实现(灵活适配多规则)

awk更适合处理「整行染色+局部文本染色」的混合需求,且规则优先级清晰:

my-app | sed 's/.*\] - *//' | awk '
BEGIN {
    gray = "\033[90m";
    yellow = "\033[33m";
    light_gray = "\033[37m";
    red = "\033[31m";
    reset = "\033[0m";
}
# 1. 优先处理ERR行(红色整行)
/ERR/ {
    print red $0 reset;
    next;
}
# 2. 处理含<s:PocApi的行(黄色整行)
/<s:PocApi/ {
    print yellow $0 reset;
    next;
}
# 3. 处理含DBG的行(浅灰色整行)
/DBG/ {
    print light_gray $0 reset;
    next;
}
# 4. 最后处理[]文本(仅局部染灰色)
{
    gsub(/\[[^\]]+\]/, gray "&" reset);
    print $0;
}
'

规则说明

  • 优先级排序:ERR(红色)> <s:PocApi(黄色)> DBG(浅灰色)> []文本(灰色),避免规则冲突。
  • 整行染色:针对ERR、<s:PocApi、DBG的行,直接给整行套色后重置。
  • 局部染色:仅将行内[...]格式的文本染成灰色,不影响其他内容。
  • 流式兼容:awk逐行处理输入,实时响应my-app的输出。

替代方案:用sed实现(纯文本处理工具)

如果偏好sed,可组合多规则命令(注意规则顺序必须从高优先级到低):

my-app | sed 's/.*\] - *//' | sed -e '
# 处理ERR行(红色)
s/^\(.*ERR.*\)/\x1b[31m\1\x1b[0m/
# 处理<s:PocApi行(黄色)
s/^\(.*<s:PocApi.*\)/\x1b[33m\1\x1b[0m/
# 处理DBG行(浅灰色)
s/^\(.*DBG.*\)/\x1b[37m\1\x1b[0m/
# 处理[]文本(灰色)
s/\[[^\]]*\]/\x1b[90m&\x1b[0m/g
'

内容的提问来源于stack exchange,提问作者Chris Miller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:35:25