线端不可知差异?

Bri*_*tow 20 unix macos diff utilities

我正在使用一些相当旧的文件.不同的程序创建了不同的文件,因此其中一些以\ r(mac)结尾,一些以\n(unix)结尾.我希望能够在这些文件上运行diff,grep等命令,但将\ r \n的命令视为一个巨行.有没有人知道一个版本的diff,grep等可以正常使用所有新行?

ETA:我也希望它们是unix实用程序,所以我可以在脚本,emacs等中使用它们......

Jay*_*Jay 12

如果使用diff -w它将忽略文件中的空格,这可能足以满足您的需求.

编辑:刚刚意识到我第一次误读了帖子,你实际上正在寻找一个可以与\r行结尾一起使用的差异.我的建议是将文件转换成可以将文件转换为标准格式的翻转文件\n.

编辑2:刚刚找到了你想要的东西 - Diff'nPatch:

Diff'nPatch是GNU'diff','patch'和'cmp'实用程序的Macintosh端口.它允许您比较和查找两个文件或文件夹之间的差异,整理两个文件,生成各种格式的差异(正常,上下文,unidiff等),应用补丁,逐字节比较文件.它可以处理任何类型的行结尾(mac,unix或windows)

  • 对于Unix vs Dos文件,-w可以创建奇迹.谢谢! (5认同)
  • 对于许多其他程序来说,换行符也是一个空白字符,但 diff 是面向行的程序,并且换行符总是结束一行。因此 -w 或 --ignore-all-space 选项不会忽略与换行相关的更改;它仅忽略其他空白更改。 (3认同)

Unc*_*eiv 9

正如杰伊所说,Diff'nPatch似乎正是你要找的.或者,您可以在单个命令中转换'\n'中所有'\ r'行结尾,如下所示:

sed -ie 's/\r/\n/' filename
Run Code Online (Sandbox Code Playgroud)

要么

find . | xargs -n1 sed -ie 's/\r/\n/'
Run Code Online (Sandbox Code Playgroud)

(在后一种情况下,您可能希望以某种方式过滤文件列表,或者它将应用于所有子目录中的所有文件.)


Kar*_*rra 8

与OSX Lion捆绑在一起的diff实用程序有一个选项'strip-trailing-cr'可以实现您想要的功能.你这样使用它:

diff -cpt a.c b.c --strip-trailing-cr
Run Code Online (Sandbox Code Playgroud)