Linux diff3命令示例
如您所知,Linux diff 命令比较两个文件。
然而,Linux diff3 实用程序比较三个文件,并且还能够将两个文件之间的差异合并到第三个文件中。在本文中,我们将通过一些示例来了解 diff3 命令的用法。
diff3 的基本语法是:
diff3 [OPTION]... MYFILE OLDFILE YOURFILE
1. 基本 Diff3 输出
对于这个例子,让我们使用这三个文件:parent.txt、your.txt 和 mine.txt。
$ cat parent.txt
Hello
This is parent file.
$ cat your.txt
Hello,
This is your file.
$ cat mine.txt
Hello
This is my file.
现在,如果 diff3 命令在这三个文件上运行:
$ diff3 parent.txt your.txt mine.txt
====
1:1,2c
Hello
This is parent file.
2:1,2c
Hello,
This is your file.
3:1,2c
Hello,
This is my file.
我们看到输出包含所有这三个文件的比较信息。在上面的输出中:
- 第一行 '====' 表示所有三个文件都不同。
- 接下来,行 '1:1,2c' 意味着对于作为 diff3 参数的第一个 (1:) 文件(在我们的例子中是 parent.txt),一到两个 (1,2) 范围内的行是不同的当与其他两个文件相比并且需要更改(c)时,这两行也显示在输出的下两行中。
- 同样可以理解“2:1,2c”和“3:1,2c”。
2. 如果三个文件中有两个是相似的
对于此示例,假设文件 mine.txt 和 parent.txt 完全相同。
$ cat parent.txt
Hello
This is a file.
$ cat your.txt
Hello,
This is your file.
$ cat mine.txt
Hello
This is a file.
现在 diff3 运行在这三个文件上:
$ diff3 mine.txt parent.txt your.txt
====3
1:1,2c
2:1,2c
Hello
This is a file.
3:1,2c
Hello,
This is your file.
第一行 '====3' 表示这次文件编号 3 即 your.txt 与其他两个不同。这在输出中也可见。
3. 'c' 用于更改,而 'a' 用于附加
到目前为止,我们已经在输出中看到了一个字母“c”。此字母表示行/文本中所需的“更改”。如果出现字母“a”,则表示需要附加一行。
让我们再举一个例子:
$ cat mine.txt
Hi,
$ cat parent.txt
Hi,
$ cat your.txt
Hi,
This is your file.
现在对这三个文件执行 diff3:
$ diff3 mine.txt parent.txt your.txt
====3
1:1a
2:1a
3:2c
This is your file.
上面的输出表明file3(即your.txt)中的更改需要附加到file1(mine.txt)和file2(parent.txt)中,以使所有三个文件都相似。或者,可以更改 your.txt 中的第二行 (c) 以使所有三个文件都相似。
4. 使用 -x 选项输出重叠变化
标志 -x 可用于输出导致重叠的更改。作为 diff3 的参数给出的文件名的顺序在这里很重要。例如 :
diff3 -x mine.txt parent.txt your.txt
意味着您要在 mine.txt 中合并将 parent.txt 变为 your.txt 的更改
让我们举个例子:
$ cat mine.txt
Hi,
This is your file.
hello
$ cat parent.txt
Hi,
This is your file.
$ cat your.txt
Hi,
This is your file.
bye
现在执行 diff3:
$ diff3 -x mine.txt parent.txt your.txt
3c
bye
所以我们看到
输出表明 mine.txt 的第三行必须更改为“再见”,以便合并将 parent.txt 转换为 your.txt 的更改
5. 使用 -e 选项输出未合并的更改
选项 -e 可用于将来自 parent.txt 到 your.txt 的非合并更改输出到 mine.txt。
考虑与上述示例相同的文件:
$ diff3 -e mine.txt parent.txt your.txt
3c
bye
所以我们看到输出显示了未合并的更改。
6.使用-m选项输出合并文件
可以使用 -m 选项生成包含所有三个文件内容的合并文件。例如,如果以下是三个文件:
$ cat mine.txt
Hi,
This is your file.
Hello
$ cat parent.txt
Hi,
This is your file.
$ cat your.txt
Hi,
This is your file.
现在如果 diff3 使用 -m 选项运行:
$ diff3 -m mine.txt parent.txt your.txt
Hi,
This is your file.
Hello
所以上面的输出显示了合并文件的内容,该文件已经合并了作为参数提供给 diff3 的所有三个文件的内容。
7. 使用 -m 选项了解冲突
生成一个合并文件(从三个文件)并不总是小菜一碟(如上例所示)。
考虑下面的输入文件内容:
$ cat parent.txt
Hi,
This is your file.
hi
$ cat your.txt
Hi,
This is your file.
hello
$ cat mine.txt
Hi,
This is your file.
Hello
如果 diff3 在上述文件上运行,则会显示以下输出:
$ diff3 -m mine.txt parent.txt your.txt
Hi,
This is your file.
<<<<<<< mine.txt
Hello
||||||| parent.txt
hi
=======
hello
>>>>>>> your.txt
这里的前两行是合并文件中无可争议的部分,但实际冲突显示在 <<<<<<< 和 >>>>>>> 以及文件名和内容之间。
8. 使用“-”从标准输入接受一个参数
可以使用“-”代替任何一个文件名,以接受来自标准输入的该参数的输入。
$ diff3 mine.txt parent.txt -
Hi,
bye====3
1:1a
2:1a
3:2c
bye
我们可以看到,当上面的命令运行时,第三个文件的内容是通过 stdin 给出的。请注意,从标准输入输入文件内容后,需要按组合键 ctrl+d 才能获得 diff3 的输出。
9. diff3 使用 diff 工具比较文件
虽然 diff3 吹嘘比较 3 个文件,但实际上它在内部使用 diff 工具来进行两个文件之间的比较。这可以通过传递一个可执行文件作为输入参数来确认:
$ diff3 mine.txt parent.txt a.out
diff3: subsidiary program `diff' failed
所以我们可以在上面的输出中看到,diff3 命令错误输出说明辅助程序“diff”失败。
10.通过-diff-program选项指定一个diff程序
diff3 命令提供了将 diff 程序作为参数提供的灵活性,以便可以使用相同的程序来比较文件并提供 diff3 可以使用的结果。此功能是通过使用 –diff-program 选项来实现的。
$ diff3 --diff-program=diff mine.txt parent.txt your.txt
====
1:2a
2:3c
c ya
3:3c
TC
11. 使用 -a 选项将所有文件视为文本
正如您在上面显示的示例 9 中看到的,当我们传递一个非文本文件(一个可执行的 a.out)时,diff3 返回错误。但是如果我们想告诉 diff3 甚至比较非文本文件,那么可以使用选项 -a 告诉 diff3 将所有输入文件视为文本文件。例如 :
$ diff3 -a mine.txt parent.txt a.out
====
1:1,2c
Hello
This is file
2:1,3c
Hello
This is file
c ya
3:1,4c
因此,上面的输出表明 diff3 甚至尝试比较将其视为文本文件的可执行文件。
- 点赞
- 收藏
- 关注作者
评论(0)