diff -w
命令,它将忽略文件中的空格,这可能已经足够满足你的需求。\r
行尾符的diff工具。我的建议是使用像flip这样的工具将文件转换为\n
标准格式。Diff'nPatch是GNU 'diff'、'patch'和'cmp'实用程序的Macintosh版本。它可以让你比较和查找两个文件或文件夹之间的差异,整理两个文件,生成各种格式的差异(正常、上下文、unidiff等),应用补丁,按字节比较文件。它可以处理任何类型的行尾符(mac、unix或windows)。
正如Jay所说,Diff'nPatch似乎是你正在寻找的。或者你可以使用以下单个命令将所有'\r'行结尾转换为'\n':
sed -ie 's/\r/\n/' filename
find . | xargs -n1 sed -ie 's/\r/\n/'
sed -ie 's/\r/\n/g' filename
可以产生所需的结果,而sed -ie 's/\r/\n/' filename
会在每行后插入一个回车符。我不确定这个额外字符的意义是什么,但对我来说它起作用了。 - LRP随 OS X v10.7 (Lion) 附带的 diff 工具有一个选项 'strip-trailing-cr',可以实现你想要的功能。使用方法如下:
diff -cpt a.c b.c --strip-trailing-cr
man
页面上说:“在输入时去除尾随回车符。” - Joshua Nozzi是的,我的换行符是\r,但那又怎样?啊!如果软件太愚蠢以至于无法意识到\r == \n,那我就要使用不同的软件,这些软件足够聪明。
PhpStorm是唯一一个拥有“即插即用”差异工具的软件,这正是我期望Mac软件做到的。我期望Mac软件能够“即插即用”。我使用Mac,这样我就可以专注于工作,而不是在每个转折点学习晦涩的终端命令,这些命令几乎都没有很好的文档说明,只是期望你理解命令应该如何格式化,没有清晰的示例,所以你永远不知道自己是否做错了或者命令是否根本无法工作,就像所有其他糟糕的软件一样。
来看一下“man diff”中的例子:
-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE.
好的,阅读完这篇文章后,我不知道它是什么意思。没有使用它的示例。"RE"是什么?它没有在任何地方说明。
接下来是这个宝石:
--GTYPE-group-format=GFMT
Similar, but format GTYPE input groups with GFMT.
--line-format=LFMT
Similar, but format all input lines with LFMT.
--LTYPE-line-format=LFMT
Similar, but format LTYPE input lines with LFMT.
LTYPE is `old', `new', or `unchanged'.
GTYPE is LTYPE or `changed'.
GFMT may contain:
%< lines from FILE1
%> lines from FILE2
%= lines common to FILE1 and FILE2
%[-][WIDTH][.[PREC]]{doxX}LETTER
printf-style spec for LETTER
LETTERs are as follows for new group, lower case for old group:
F first line number
L last line number
N number of lines = L-F+1
E F-1
M L+1
LFMT may contain:
%L contents of line
%l contents of line, excluding any trailing newline
%[-][WIDTH][.[PREC]]{doxX}n
printf-style spec for input line number
Either GFMT or LFMT may contain:
%% %
%c'C' the single character C
%c'\OOO'
the character with octal code OOO
我完全看不懂这段话。"input"是什么?它是两个文件还是只有"to"文件或"from"文件?"similar"指的是什么?句子中的"is"是什么意思,"GFMT 'is' LTYPE or `changed'"?它是指"可能被替换为"吗?如果是,那么为什么"GFMT"没有加引号、括号等呢?由于没有给出示例,所以无法知道;文档的措辞完全模糊不清。"GFMT may contain"是什么意思?"contain"是否意味着替换缩写GFMT的文本可以包含它?没有明确的示例,它就完全没用了。 diff -d --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml
...无法忽略 \r 字符。
diff -wd --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml
...无法忽略 \r 字符。
diff -wd --suppress-common-lines --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml
...未能忽略 \r 字符。
diff -wd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space
...未能忽略 \r 字符。
diff -awd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space
...未能忽略 \r 字符。
如果它们是 \n 字符,当添加了 \n 字符时也会失败。
其中 test.phtml ==
foo
bar
和 rest.html ==
foobar
"diff" 命令总是会给你类似以下的结果:
*** 1,2 **** ! foo ! bar \ No newline at end of file
--- 1 ---- ! foobar \ No newline at end of file
...失败!
dos2unix命令可帮助您首先将文件转换为一致的格式。 我相信它适用于几乎所有想象得到的平台,并且可以同时运行大量文件。 我相信Mac有一个可用的软件包。
diff -r -q dir1/ dir2/
2: 使用所用的编辑器打开并保存每个列出的文件,这将更改行尾。
3: 进行常规差异比较
缺点包括:
这对我有用:
diff -r --ignore-all-space dir1/ dir2/
我使用的是OS X操作系统,同时拥有来自OS X和Windows的混合文件。
参考资料:http://www.codealpha.net/514/diff-and-ignoring-spaces-and-end-of-lines-unix-dos-eol/
foo<换行符>bar
,另一个是foobar
,你难道不会说它们是不同的吗? - Wisco crew
diff
将文件中的每一行都标记为差异。我比较了DOS/*X文件,使用diff -uw
命令解决了这个问题。 - rplantiko