如何使用wdiff高亮两个文件的词汇差异并将不同词汇标红
如何使用wdiff标记两个文件的词汇差异(差异内容标红)
问题现状
当前使用如下脚本调用wdiff对比文件:
#! usr/bin/bash wdiff -si12 exp3.txt out.txt | colordiff
执行输出如下:
Input an integer greater than or equal to 0 or -1 to quit: The largest number is 5 Goodbye! exp3.txt: 6 words 39 100% common 0 0% deleted 0 0% changed out.txt: 6 words 39 100% common 0 0% inserted 0 0% changed
目前仅能输出共有词汇、统计信息,无法将差异词汇标记为红色,查阅wdiff帮助参数未找到对应配置方法。
解决步骤
- 先修正基础问题
- 你当前输出的统计信息显示两个文件100%词汇重合,不存在任何差异,这种情况下无论怎么配置都不会出现差异高亮。可以先修改其中一个文件的部分内容(比如把out.txt里的数字5改成6),制造可对比的差异再调试。
- 脚本的shebang路径写法有误,正确写法应为
#!/usr/bin/bash,开头缺少根路径斜杠,可能导致脚本执行异常。
- 配置差异标红(两种方案选其一即可)
wdiff默认用[- 原文件独有内容 -]、{+ 新文件独有内容 +}的格式标记差异,colordiff默认不识别这种专属标记,所以直接管道给colordiff不会触发高亮。- 方案1:直接通过wdiff的自定义标记参数注入ANSI红色转义码,无需依赖colordiff
参数说明:wdiff -s \ -w $'\033[31m[-' -x $'-]\033[0m' \ -y $'\033[31m{+' -z $'+}\033[0m' \ exp3.txt out.txt-w/-x:分别设置原文件独有(删除)内容的首尾包裹符,开头加ANSI红色转义序列\033[31m,结尾加颜色重置序列\033[0m,避免后续所有文本被染红-y/-z:分别设置新文件独有(新增)内容的首尾包裹符,同样配置红色显示
如果需要区分差异类型,比如删除内容显红、新增内容显绿,把-y/-z参数里的31改成绿色对应的色值32即可。
- 方案2:让wdiff输出标准diff兼容格式,再交给colordiff识别高亮
加-d参数让wdiff生成diff工具可识别的差异格式,colordiff就能正常解析高亮:wdiff -d -s exp3.txt out.txt | colordiff
- 方案1:直接通过wdiff的自定义标记参数注入ANSI红色转义码,无需依赖colordiff
内容的提问来源于stack exchange,提问作者Jenny Kim
相关产品推荐
相关产品推荐

