前言
Linux 中有两个比拟命令,它们别离是 comm
和diff
,在比拟文本文件的版本时通常很有用。本文介绍它们的区别和简略用法。
comm 命令
该命令对两个文本文件进行比拟,并显示每个文件独有的行和它们共有的行。
假如咱们有两个文件:
当咱们运行 comm file1.txt file2.txt
时,咱们会失去:
在我看来,comm
的输入有些难看,但它是三列。请原谅我蹩脚的线条:
第一列蕴含第一个文件参数特有的行,第二列蕴含第二个文件参数特有的行,第三列蕴含两个文件共有的行。
咱们能够通过应用选项 -n
,来抉择暗藏指定的列,其中n
能够是 1、2 或 3。假如咱们只想输入两个文件共有的行,咱们能够应用comm -12 file1.txt file2.txt
。
diff 命令
diff
是一个更加简单的工具。它反对多种输入格局,并有能力一次解决大量的文本文件集。diff
常常被用来创立 diff
文件(补丁),这些文件被 path
等程序用来将一个或多个文件的一个版本转换成另一个版本。让咱们在之前的两个文件上运行diff
:diff file1.txt file2.txt
。
这是默认的输入款式。在该格局中,每组变动之前都有一个变动命令,以 range operation range
的模式形容将第一个文件转换为第二个文件所需的地位和变动类型。
首先来看:
1d0
< a
这通知咱们必须删除 file1
的第一行,也就是带 a 的那一行。
接下来看:
4a4
> e
这通知咱们,咱们必须在第一个文件里增加一行,在第四行的地位。而后通知咱们在哪一行增加> e
。
我晓得这是令人困惑的,坦白说,默认款式没有应用太多的上下文格局和对立格局,让咱们看看那些解释更多。让咱们来看看这些,并作进一步解释。
咱们能够通过增加 -c
选项来应用上下文格局:
diff -c file1.txt file2.txt
在顶部咱们能够看到,两个文件的名称以及工夫戳,第一个文件应用星号标记,第二个文件应用破折号标记。diff
将应用星号或破折号来让咱们晓得,它在整个列表的其余部分议论的是哪个文件。
接下来咱们会看到一行星号,这仅仅是为了格式化。
而后咱们失去一系列的变动,在第一组变动中,咱们能够看到:
*** 1,4 ****
这意味着第一个文件中的第 1 行到第 4 行。
而后能够看到:
- a
b
c
d
这就是文件的内容。只不过在 a
后面有个-
,这意味着咱们要删除它。
标记 | 含意 |
---|---|
blank | 不须要任何扭转 |
(-) | 须要删除行 |
(+) | 须要增加行 |
! | 须要扭转行 |
在第一组变动中,咱们能够看到带有 -a
的行须要从第一个文件中删除。第二组变动为:
--- 1,4 ----
b
c
d
+ e
---1,4----
是第二个文件的范畴,+ e
意味着咱们须要增加该行到第一个文件中,记住咱们的指标是让第一个文件匹配第二个文件。
咱们也能够应用对立格局,它与格局上下文相似,然而更简洁。它打消了上下文的反复行。diff -u file1.txt file2.txt
。