在我目前的工作中,我经常需要处理来自 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
实用程序。