Questions tagged «diff»

diff-命令行工具,用于显示两个文件或两个目录中每个对应文件之间的差异。

4
差异两个文件与切换行的结果说两次丢失同一行
我试图理解两个文件的linux diff命令,它们的行只是彼此置换,但无法查看其生成的输出。请考虑以下三个命令: [myPrompt]$ cat file1 apples oranges [myPrompt]$ cat file2 oranges apples [myPrompt]$ diff file1 file2 1d0 < apples 2a2 > apples 有人可以解释diff的上述神秘输出。 为什么输出中根本没有提到“橙色”? 是什么1d0和2a2意味着什么? 我从这个答案中了解到: “ <”表示文件2中缺少该行,而“>”表示文件1中缺少该行 但是并不能解释为什么输出中缺少橙子。
28 diff 

1
diff-输出行号
我想使用cli工具进行文件比较,并且需要在输出行之前输入行号,以帮助我跳到行差,因为我使用的工具可以理解跳到哪里(如果行是这样开始的) :line-number: regular line contents 因此,我尝试了diff,并且阅读文档似乎有可能: -D, --ifdef=NAME output merged file with `#ifdef NAME' diffs --GTYPE-group-format=GFMT format GTYPE input groups with GFMT --line-format=LFMT format all input lines with LFMT --LTYPE-line-format=LFMT format LTYPE input lines with LFMT These format options provide fine-grained control over the output of diff, generalizing -D/--ifdef. LTYPE …
25 diff 

1
“ -d”选项对diff有什么影响?
diffOpenBSD上的实现具有非标准-d选项,其中包含以下文档: -d 尽力产生尽可能小的差异。处理具有许多更改的大文件时,这可能会消耗大量处理能力和内存。 对于diff较短的文档,GNU 实现具有相同的选项 -d, --minimal 尝试找到较小的一组更改 我不时使用此选项只是为了查看它是否生成与diff没有该选项的相同命令具有任何形状或形式的输出,但是我从未见过任何区别(无双关)。 有人可以提供或指出一个示例,其中该选项实际上与没有命令的同一命令产生不同的结果-d吗?或者,如果有人可以解释启用此选项所需的情况。我也不确定“最小”是指“输出的行数减少”还是“更少的请求”。 一个没有根据的猜测是,它与很大的结块有关。
24 diff 

3
差异,仅显示正确文件中的修改行
我有文件a,b并且我想输出b自从克隆以来更改的行a。仅修改的行,没有周围的上下文,没有diff偏移标记。 如何使用Shell脚本来做到这一点?(没有Python / Perl / PHP / ...) Sed和awk是可接受的解决方案。 现在,我正在使用--suppress-common-lines diff -y并使用正则表达式反向引用sed来仅在空白之后获取正确的部分。肯定有更好的办法? 使用perl(这是被禁止的),我会做这样的事情: diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
24 shell-script  sed  awk  diff 

5
如何比较两个文件夹并将差异复制到第三个文件夹?
您有三个文件夹: 当前文件夹,其中包含您的当前文件 文件夹old,其中包含相同文件的旧版本 文件夹差异,这只是一个空文件夹 你如何比较旧与当前和副本是不同的(或全新的)中的文件当前以区别? 我已经四处搜寻,似乎很容易解决,但在我的特定示例中却无法解决。大多数资源都建议使用rsync,因此我得到了以下命令: rsync -ac --compare-dest=../old/ new/ difference/ 但是,这样做是将所有文件从新文件复制到不同文件,甚至与旧文件相同。 万一它有帮助(也许命令很好并且故障在其他地方),这就是我测试的方式: 我做了三个文件夹。 我提出了一些文本文件,在不同的内容旧。 我将文件从旧复制到新。 我在new中更改了某些文件的内容,并添加了一些其他文件。 我运行了上面的命令,并检查了结果差异。 在过去的几天里,我一直在寻找解决方案,非常感谢您的帮助。它不一定必须使用rsync,但如果可能的话,我想知道我在做什么错。
23 files  rsync  diff  file-copy 


3
如何解决“ Hunk#1 FAILED at 1(不同的行尾)”消息?
我正在尝试使用命令创建补丁 git diff sourcefile >/var/lib/laymab/overlay/category/ebuild/files/thepatch.patch 当我应用补丁时,它给了我 $ patch -v GNU patch 2.7.5 $ /usr/bin/patch -p1 </var/lib/laymab/overlay/category/ebuild/files/thepatch.patch patching file sourcefile Hunk #1 FAILED at 1 (different line endings). Hunk #2 FAILED at 23 (different line endings). Hunk #3 FAILED at 47 (different line endings). Hunk #4 FAILED at 65 (different line …
22 git  diff  newlines  patch 

6
比较目录但不比较文件内容
使用diff -r我可以执行此任务,但是它花费了很长时间,因为diff检查文件的内容。 我想要确定两个文件的大小,上次修改的文件等相同的内容。但是却无法一点一点地检查文件(例如,视频需要很长时间) 还有其他办法吗?

5
输出两个文本文件的公共行(相似性)(与diff相反)?
Diff是显示两个文件之间的更改的好工具。但是如何显示两个文本文件的相似性(同时忽略差异)呢? 即样本输入: a: Foo Bar X Hello World 42 b: Foo Baz Hello World 23 伪输出(类似这样): @@ 2,3 =Hello World 仅对两个文件进行排序并使用comm是不够的,因为在这种情况下,行信息会丢失。

3
仅显示基于正则表达式的差异/补丁的相关块
git log -G<regex> -p是一个很棒的工具,可以在代码库的历史记录中搜索与指定模式匹配的更改。但是,将相关的块放置在差异较大/不相关的块的海洋中的diff / patch输出中可能会让人不知所措。 当然可以在的输出中搜索git log原始的字符串/正则表达式,但这并不能减少视觉噪音和许多无关更改的干扰。 继续阅读git log,我看到有--pickaxe-all,它与我想要的完全相反:它扩大了输出(扩展到整个变更集),而我想将其限制(到特定的块)。 本质上,我正在寻找一种“智能”地将差异/补丁解析为单个块的方法,然后针对每个块执行搜索(仅针对更改的行),丢弃不匹配的块,然后将其输出那做。 我所描述的工具是否存在?有没有更好的方法来获得匹配的/受影响的大块头? 我已经完成了一些初步的研究... 如果可以grep比较/修补程序输出并使上下文选项值动态(例如,通过正则表达式而不是行数),则可能就足够了。但是grep并不是完全按照这种方式构建的(我也不一定要求该功能)。 我找到了patchutils套件,最初听起来好像它可以满足我的需求。但是在阅读其man页面之后,这些工具似乎无法处理基于正则表达式的匹配块。(不过,他们可以接受帅哥列表...) 我终于遇到了splitpatch.rb,它似乎可以很好地处理补丁的解析,但是需要对其进行显着扩展,以通过stdin,匹配所需的块,然后输出块来处理读取补丁。
20 git  diff  patch 


5
为什么在仅使用cp更容易时使用diff / patch
diff -u file1.txt file2.txt > patchfile 创建一个补丁文件,该文件包含用于patch将file1.txt转换为与file2.txt完全相同的指令 不能使用cp命令代替吗?我可以想象这对于文件太大并且必须通过网络传输的网络很有用,这种方法可能会节省带宽。还有其他方法可以使用diff / patch在其他情况下是有利的吗?
19 shell  cp  diff  patch 

7
如何使用patch和diff合并两个文件并自动解决冲突
我已经阅读了有关diff和patch的内容,但我不知道如何应用所需的内容。我想这很简单,因此为了显示我的问题,请使用以下两个文件: xml文件 <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#AAAAAA</color> <color name="not_in_b_too">#AAAAAA</color> </resources> b.xml <resources> <color name="same_in_b">#AAABBB</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_a">#AAAAAA</color> </resources> 我想要一个输出,看起来像这样(顺序无关紧要): <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_b_too">#AAAAAA</color> <color name="not_in_a">#AAAAAA</color> </resources> 合并应包含遵循以下简单规则的所有行: 仅在其中一个文件中的任何行 如果一行具有相同的名称标签但值不同,则从第二行取值 我想在bash脚本中应用此任务,因此如果另一个程序更合适,那么它不一定需要完成diff和patch的操作。


3
Git传呼机较少,但是是什么导致输出着色?
less根据此线程,它本身无法进行语法突出显示。 但是,可以git diff用较少的默认分页器很好地显示彩色输出。当我将的输出重定向git diff到文件中时,看不到颜色转义序列。 是否git diff知道它的发送位置,并相应地格式化输出?一个人怎么做? 我只是注意到git为diff输出(例如git diff)着色,但是,它通常不知道如何突出显示语法。例如 git show 415fec6:log.tex 没有启用任何类似TeX的语法。 阅读git源代码,我发现了以下提示 在diff.h: int use_color; 我以前指的是语法突出显示,但这是不正确的。我的意思是输出着色,请参见例如
18 colors  git  diff  pager  colordiff 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.