如何在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
相关产品推荐
相关产品推荐

