Bash中如何为两个文件的差异字符串添加颜色高亮显示
实现文件内容并排显示并高亮差异的方法
嘿,我有几个实用的方法帮你搞定这个需求——既能像你用pr那样并排显示两个文件的全部内容,又能把差异部分高亮成红色,一起来看看:
方案一:用sdiff(简单直接的懒人方案)
sdiff本身就是专门用来并排对比文件的工具,自带颜色高亮功能,直接跑下面的命令就行:
sdiff --color=always file1.txt file2.txt
它会自动把两侧不一样的内容用红色标出来,还会用|符号标记差异行,布局清晰,完全满足你的需求。
方案二:结合pr和awk自定义适配(贴合你原来的输出习惯)
如果你特别习惯pr -m -t的输出格式,那可以用awk来识别差异行并加上颜色标记,命令如下:
pr -m -t file1.txt file2.txt | awk ' { # 按多个空格分割每行的左右两部分 split($0, lineParts, /\s{2,}/) if (lineParts[1] != lineParts[2]) { # 给差异内容加上红色高亮的终端转义码,最后恢复默认颜色 printf "\033[31m%s\033[0m\t\t\033[31m%s\033[0m\n", lineParts[1], lineParts[2] } else { # 内容一致就直接输出原行 print $0 } } '
这个命令先通过pr生成你熟悉的并排布局,再用awk判断每行左右两段是否相同,不一样的部分就用终端红色高亮显示。
小提醒:
- 终端颜色转义码在大多数现代终端(比如bash、zsh)都能正常工作,如果是Windows的CMD,可能需要先开启终端的ANSI颜色支持才能生效。
- 如果你的
pr输出里左右内容的分隔不是多个空格,可以调整awk里的分割规则,比如根据固定列数来拆分,适配你的实际输出情况。
内容的提问来源于stack exchange,提问作者Noor
相关产品推荐
相关产品推荐

