标签: diff

diff 行大体相同但乱序的地方?

我想区分两组 mod_rewrite 规则。这组行大约有 90% 相同,但顺序如此不同以至于 diff 基本上说它们完全不同。

无论行号如何,如何查看两个文件之间哪些行真正不同?

command-line diff

29
推荐指数
2
解决办法
3万
查看次数

输出两个文本文件的公共行(相似性)(diff 的反义词)?

Diff 是一个很好的工具来显示两个文件之间的变化。但是如何显示两个文本文件的相似性(同时忽略差异)?

即样本输入:

a:
Foo Bar
X
Hello
World
42

b:
Foo Baz
Hello
World
23
Run Code Online (Sandbox Code Playgroud)

伪输出(类似这样):

@@ 2,3
=Hello World
Run Code Online (Sandbox Code Playgroud)

仅对两个文件进行排序并使用 comm 是不够的,因为在这种情况下,行信息会丢失。

command-line shell diff

28
推荐指数
4
解决办法
4万
查看次数

diff 两个文件与切换行的结果表示两次丢失同一行

我试图了解两个文件上的 linux diff 命令,它们的行只是彼此的排列,但无法理解它生成的输出。考虑以下三个命令:

[myPrompt]$ cat file1
apples
oranges
[myPrompt]$ cat file2 
oranges
apples
[myPrompt]$ diff file1 file2
1d0
< apples
2a2
> apples
Run Code Online (Sandbox Code Playgroud)

有人可以解释上述 diff.c 的神秘输出吗?

  1. 为什么输出中根本没有提到“橙子”?
  2. 是什么1d02a2意味着什么?

从这个答案中了解到:

“<”表示文件 2 中缺少该行,“>”表示文件 1 中缺少该行

但这并不能解释为什么输出中缺少橙子。

diff

28
推荐指数
4
解决办法
6170
查看次数

显示 diff --exclude 工作吗?

我试图diff在忽略某些子目录的同时比较两个目录树,但我无法让它工作。这是我的文件结构的样子:

temp/
|-- d1/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt
|-- d2/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt
Run Code Online (Sandbox Code Playgroud)

我试图让它忽略d1/ignoreme和下的任何内容d2/ignoreme,但它不会这样做。

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/ d1 d2
Files d1/ignoreme/f2.txt and d2/ignoreme/f2.txt differ
Run Code Online (Sandbox Code Playgroud)

我也试过

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* d1 d2
Run Code Online (Sandbox Code Playgroud)

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* --exclude=/home/ubuntu/temp/d2/ignoreme/* d1 d2
Run Code Online (Sandbox Code Playgroud)

但我总是得到相同的结果。我如何让这个工作?

diff

26
推荐指数
1
解决办法
2万
查看次数

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 is `old', `new', or `unchanged'.  GTYPE is LTYPE or `changed'.
    GFMT (only) may contain:
      %<  lines from FILE1
      %>  lines from FILE2
      %=  lines common to …
Run Code Online (Sandbox Code Playgroud)

diff

25
推荐指数
1
解决办法
4万
查看次数

两个文件之间的公共行

我在我的终端上运行了以下代码。

LC_ALL=C && grep -F -f  genename2.txt hg38.hgnc.bed > hg38.hgnc.goi.bed
Run Code Online (Sandbox Code Playgroud)

这并没有给我两个文件之间的公共行。我在那里缺少什么?

diff awk text-processing uniq comm

25
推荐指数
1
解决办法
7万
查看次数

“-d”选项对 diff 有什么影响?

diffOpenBSD 上的实现有一个非标准-d选项,其中包含以下文档:

-d

非常努力地产生尽可能小的差异。在处理具有许多更改的大文件时,这可能会消耗大量处理能力和内存。

GNUdiff实现具有与较短文档相同的选项

-d, --minimal

努力找到较小的一组更改

我不时使用此选项只是为了查看它是否生成与diff没有该选项的同一命令不同的任何形状或形式的输出,但我从未见过任何区别(没有双关语意)。

有人可以提供或指出一个示例,其中此选项实际上会从相同的命令中产生不同的结果-d吗?或者,如果有人可以解释此选项启动所需的情况。我也不确定“最小”是指“更少的输出线”还是“更少的大块头”。

一个没有受过教育的猜测是它与非常大的大块头有关。

diff

24
推荐指数
1
解决办法
1444
查看次数

如何使用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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我想要一个输出,看起来像这样(顺序无关紧要):

<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>
Run Code Online (Sandbox Code Playgroud)

合并应包含符合此简单规则的所有行:

  1. 仅在其中一个文件中的任何行
  2. 如果一行具有相同的名称标签但具有不同的值,则从第二个中获取值

我想在 bash 脚本中应用这个任务,所以如果另一个程序更适合,它不一定需要完成差异和补丁

xml diff patch text-processing merge

23
推荐指数
3
解决办法
4万
查看次数

如何比较两个文件夹并将差异复制到第三个文件夹?

你有三个文件夹:

  • 文件夹current,其中包含您当前的文件
  • 文件夹old,其中包含相同文件的旧版本
  • 文件夹差异,它只是一个空文件夹

你如何比较当前和副本是不同的(或全新的)中的文件当前区别


我四处搜索,这似乎是一件很容易解决的事情,但我无法在我的特定示例中使用它。大多数消息来源建议使用rsync,所以我最终使用了以下命令:

rsync -ac --compare-dest=../old/ new/ difference/
Run Code Online (Sandbox Code Playgroud)

然而,这样做是将所有文件从new复制到difference,即使是那些与old相同的文件。

如果它有帮助(也许命令没问题,而故障出在其他地方),我就是这样测试的:

  1. 我做了三个文件夹。
  2. 我在旧的.
  3. 我将文件从old复制到new
  4. 我在new 中更改了一些文件的内容并添加了一些其他文件。
  5. 我运行了上面的命令并检查了差异的结果。

过去几天我一直在寻找解决方案,我真的很感激一些帮助。它不一定必须使用 rsync,但如果可能的话,我想知道我做错了什么。

diff rsync file-copy files

23
推荐指数
2
解决办法
3万
查看次数

获取使用 apt 安装的原始文件和当前文件之间的差异更改

php5-fpm使用安装包apt;然后我对 PHP 配置文件进行了一些更改。

现在我会得到原始文件版本(安装的包的版本)和当前版本(由我修改)之间的差异。怎么做?

ubuntu diff debian apt

22
推荐指数
3
解决办法
1万
查看次数

标签 统计

diff ×10

command-line ×2

text-processing ×2

apt ×1

awk ×1

comm ×1

debian ×1

file-copy ×1

files ×1

merge ×1

patch ×1

rsync ×1

shell ×1

ubuntu ×1

uniq ×1

xml ×1