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

如何使用ANSI颜色码在bash终端输出文件中的带颜色文本

问题原因

  • sed命令使用单引号包裹替换规则时,Bash不会解析单引号内部的变量,所以写入文件的是${RED}、${GREEN}这类原始字符串,而非实际的ANSI颜色控制码,自然无法显示颜色。

解决方法

方案1:修改原有脚本的引号规则

将sed的单引号替换为双引号,双引号内的变量会被Bash正常展开:

RED='\033[0;31m'
NC='\033[0m'
GREEN='\033[0;32m'

# 替换单引号为双引号,合并两个sed规则简化调用
sed "s/No/${RED}No${NC}/g;s/Yes/${GREEN}Yes${NC}/g" file.txt > color_file.txt

printf "$(cat color_file.txt)"

方案2:无中间文件的极简实现

如果不需要保存带颜色的内容到文件,可以直接处理输出,用awk实现逻辑更清晰:

RED='\033[0;31m'
NC='\033[0m'
GREEN='\033[0;32m'

# 直接输出带颜色内容
awk -v red="$RED" -v green="$GREEN" -v nc="$NC" '{
    if ($0 == "Yes") print green $0 nc
    else if ($0 == "No") print red $0 nc
    else print $0
}' file.txt

注意事项

保存了颜色控制码的文件仅在支持ANSI转义码的终端中可以正常显示颜色,在不支持转义码的环境下打开会显示乱码的控制字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:07