`diff -y 文件-{a,b} | less` 和 DOS 行结尾显示问题

`diff -y 文件-{a,b} | less` 和 DOS 行结尾显示问题

在我目前的工作中,我经常需要处理来自 Windows 计算机的文件,这在大多数时候并不是什么大问题,但是当并排管道连接diff到时less,不仅会^M显示,而且还会弄乱缩进,如下所示:

<U+FEFF>using System;^M                                 <U+FEFF>using System;^M                                 
using System.Reflection;^M                                      using System.Reflection;^M                                      
using System.Runtime.Serializa^M                                        using System.Runtime.Serializa^M                                        
using System.Transactions;^M                                    using System.Transactions;^M                                    

(我并不特别介意第一行中的 UTF-8 BOM,因为它只影响那一行。)

我知道我可以做一个

diff -y <(tr -d '\015' < 文件-a) <(tr -d '\015' < 文件-b) |较少的

但这需要输入大量内容,并且当file-a共享file-b很长的路径时,您无法很好地使用 bash 的花括号。和

diff -y 文件-{a,b} | tr -d '\015' |较少的

并没有达到目的,因为格式已经混乱了。

但有趣的是,以下内容在^M缩进方面都显示良好:

diff -y 文件-{a,b} |头

所以我的问题是,如何在不出现上述问题的情况下将并排差异通过管道传输到 less 中? (就像向 diff 或 less 添加一些我不知道的参数)

答案1

如果您不修改文件,只是打印差异,那么一种选择是简单地忽略所有带有选项的空格-w,以便您可以正常使用大括号

diff -wy file-{a,b} | less

当然,这种方法只有在空白没有其他重要变化的情况下才有效。

如果您的目的是修复文件,那么我建议使用dos2unix实用程序。

相关内容