我正在Mac上工作,其中包含一些相当旧的文件。不同的文件是由不同的程序创建的,因此其中一些以\ r(Mac)结尾,而某些以\ n(Unix)结尾。我希望能够在这些文件上运行diff,grep等命令,但是具有\ r的命令被视为一条巨大的线。是否有适用于所有换行符的diff,grep等版本?
ETA:我也希望它们成为Unix实用程序,因此我可以在脚本,Emacs等中使用它们...
正如杰伊所说,Diff'nPatch似乎是您想要的。另外,您也可以在单个命令中将所有以'\ n'结尾的'\ r'行尾转换为单个命令,如下所示:
sed -ie 's/\r/\n/' filename
或
find . | xargs -n1 sed -ie 's/\r/\n/'
((在后一种情况下,您可能希望以某种方式过滤文件列表,否则它将应用于所有子目录中的所有文件。)
如果使用diff -w
,它将忽略文件中的空格,这可能足以满足您的需求。
EDIT:刚刚意识到我是第一次误读了这篇文章,而您实际上正在寻找一种适用于\r
行尾的差异。我的建议是使用flip这样的文件来转换文件,这些文件可以将文件转换为\n
标准格式。
EDIT 2:刚刚找到了您想要的东西-Diff'nPatch:
Diff'nPatch是Macintosh的端口GNU'diff','patch'和'cmp'实用程序。它可以让您比较和查找两个文件之间的差异或文件夹,整理两个文件,生成各种格式的差异(正常,上下文,unidiff等),应用补丁,逐字节比较文件。它可以处理任何类型的行尾(Mac,Unix或Windows)
与OSX Lion捆绑在一起的diff实用程序具有所需的选项'strip-trailing-cr'。您可以这样使用它:
diff -cpt a.c b.c --strip-trailing-cr
dos2unix命令可能有助于先将文件转换为一致的格式。我相信几乎所有您能想到的平台都可以使用它,并且可以一次在许多文件上运行。我相信有一个适用于Mac的软件包。
PHPStorm的差异视图的“忽略空白” 有效。它会自动忽略回车/ EOL /换行/有什么需要之间的差异。您可以浪费时间摆弄神秘的unix命令或其他任何东西,或者您可以得到一些切实可行的东西并不断前进。
是,我的换行符是\ r,那又如何呢?啊!如果该软件太愚蠢而无法意识到\ r == \ n,那么我将使用is
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
我对这段文章一无所知。什么是“输入”?是两个文件,还是“至”文件还是“从”文件?什么是“相似”? “ GFMT'是'LTYPE或'已更改'”在句子中的“是”是什么意思?这是否意味着“可能被替换”?如果是这样,为什么在引号或方括号等中不包含“ GFMT”?由于没有给出示例,因此无法知道。该文档的措辞完全模棱两可。 “ GFMT可能包含”是什么意思? “包含”是否意味着替换缩写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 ==
foobar
和rest.html ==
foobar“ diff”命令总是给您类似的东西:
! foo!栏\文件末尾没有换行符--- 1 ----! foobar \文件末尾没有换行符* 1,2 **
...失败!
1
diff -r -q dir1/ dir2/
2
:使用所使用的编辑器打开并保存每个列出的文件,这将更改行尾。
3
:进行常规差异缺点包括:diff -r --ignore-all-space dir1/ dir2/
我在OSX上,并且混合了来自OSX和Windows的文件。信用:http://www.codealpha.net/514/diff-and-ignoring-spaces-and-end-of-lines-unix-dos-eol/