如何在Shell脚本中为CSV文件设置标题加粗及差异内容红色显示?
解决方案
核心问题说明
你之前的代码未生效,主要是缺少颜色重置转义码,且没有对diff的每一行内容应用红色格式。终端显示加粗/颜色依赖ANSI转义码,需确保变量定义和输出逻辑正确。
完整Shell脚本示例
# 定义ANSI格式转义码 BOLD='\033[1m' # 加粗样式 RED='\033[0;31m' # 红色字体 RESET='\033[0m' # 重置所有格式(必须添加,避免后续文本继承样式) # 1. 输出带加粗标题的CSV内容(左右并列两个文件) printf "${BOLD}source,target${RESET}\n" # 使用paste命令将两个文件按行合并为CSV格式(逗号分隔) paste -d ',' file1.txt file2.txt # 2. 输出红色高亮的diff差异 printf "\n${RED}DIFFERENCES${RESET}\n" # 对diff的每一行前后添加红色转义码,确保所有差异内容变红 diff file1.txt file2.txt | sed "s/^/${RED}/; s/$/${RESET}/"
关键细节解释
- 格式重置:
RESET变量必须在每个格式化文本后添加,否则终端会一直保持当前样式(比如持续显示红色)。 - diff内容高亮:通过
sed对diff输出的每一行开头加红色转义、结尾加重置转义,实现整行差异内容变红。 - 终端兼容性:大部分现代终端(如bash、zsh、iTerm2、GNOME Terminal)都支持ANSI转义码,若显示异常可检查
TERM变量是否为xterm-256color或类似值(执行echo $TERM查看)。
注意事项
如果需要将带格式的内容写入CSV文件,普通CSV阅读器(如Excel)会显示ANSI转义码乱码,因此更推荐仅在终端输出时应用格式,CSV文件本身保持纯文本格式。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

