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

如何在Bash脚本输出中按关键词对特定行进行差异化颜色高亮

如何在Bash脚本输出中按关键词对特定行进行差异化颜色高亮

嗨,这个需求我之前也碰到过,你之前直接用printf "${YELLOW}"给整个终端设置默认颜色的方式,肯定没法区分不同关键词的行。咱们换个思路,用awk来逐行处理脚本的输出,就能轻松实现按关键词着色啦!

具体解决方案

首先,咱们先把颜色变量定义完整,一定要加上重置颜色的变量,不然输出完带颜色的内容后,终端后续的文字可能会一直保持最后用的颜色:

YELLOW="\e[33m"
GREEN="\e[92m"
RED="\e[31m"
RESET="\e[0m"  # 重置回终端默认颜色

然后,咱们把config.sh的输出通过管道传给awk,让它逐行判断内容并应用对应颜色:

./config.sh --enable 1 2 3 4 5 --disable 6 7 8 9 | awk -v yellow="$YELLOW" -v green="$GREEN" -v red="$RED" -v reset="$RESET" '
    # 匹配以Enable开头的行,用绿色输出
    /^Enable/ { print green $0 reset; next }
    # 匹配以Disable开头的行,用红色输出
    /^Disable/ { print red $0 reset; next }
    # 其他所有行用黄色输出
    { print yellow $0 reset }
'

代码解释

  • -v yellow="$YELLOW":把Shell里定义的颜色变量传递给awk,避免引号转义的问题。
  • /^Enable/:精准匹配以Enable开头的行(如果你的行是中间包含Enable,把^去掉改成/Enable/就行)。
  • next:处理完当前匹配的行后,跳过后面的判断,直接处理下一行,提高效率。
  • reset:每一行输出后都重置颜色,确保不会影响后续行或者终端的默认输出。

这样处理后,你的输出就会变成:

Enable 1 (绿色)
Enable 2 (绿色)
...
Disable 6 (红色)
Disable 7 (红色)
...
aaaaaaaaaaa (黄色)
bbbbbbbbbbb (黄色)
...

完全符合你想要的效果!

备注:内容来源于stack exchange,提问作者gabberhead

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:34:35