在本期中,本站将为您带来关于如何在Linux中使用diff命令的信息。文章内容丰富,从专业角度分析叙述。看完这篇文章,希望你能有所收获。
总览
差异[选项]源文件目标文件
描述
在最简单的情况下,比较两个文件(源文件和目标文件)的内容。文件名可以通过标准输入设备进行文本读取。作为一种特殊情况,diff-compare自己的标准输入副本。如果源文件是目录,而目标文件不是(目录),Diff会将源文件(目录)中的文件与目标文件同名的文件进行比较,反之亦然。非目录文件不能-。如果源文件和目标文件都是目录,diff会比较两个目录中相应的文件,并按字母顺序对它们进行排序。这种比较不是递归的,除非-r或- recursive。给出了diff,目录的内容不作为文件进行比较。指定的文件不能是标准输入,因为标准输入是匿名的,“同名文件”视图不适用。diff选项以-开头,因此源文件(名称)和目标文件(名称)通常不能以-开头。然而,-可以被认为是保留的,甚至作为文件名的开始(它们以-开头。)
下面是GNU接受的所有diff选项的总结。大多数选项都有两个相同的名称,一个是后跟-的单个字母,另一个是从-派生的长名称。多个单字母选项(除非它们不明确)可以组合成一行命令行语法-ac相当于-A-C。长名称选项可以缩短为其名称的任何唯一前缀。使用[]
-行数(整数)
显示上下文行数(整数)。此选项本身不指定输出格式,除非与-c或-u结合使用,否则没有任何效果。这是一个过时的选项,为了正确操作,上下文必须至少有两行。
构成动植物的古名或拉丁化的现代名
所有文件都被视为文本文件,以便逐行比较,即使它们不是文本文件。
-b
忽略由空格引起的更改。
-乙
忽略由插入和删除空行引起的更改。
-简短
只报告文件是否不同,关心差异的细节。
-c
使用上下文输出格式。
-C行数(整数)
-上下文[=行]
使用上下文输出格式,显示指定行数(整数),或三行(当行数未给出时。为了正确操作,上下文必须至少有两行。
-已更改-组-格式=格式
使用format输出一组包含两个文件之间差异的行,格式为if-then-else。
-d
更改算法可能会发现一组较小的更改。这将使diff变慢(有时甚至更慢)。
-D名
合并if-then-else格式输出,预处理宏(由name参数提供)条件。
-e
表示“有…的”
输出是有效的ed脚本。
-exclude=模式
比较目录时,忽略目录中匹配模式的目录。
– exclude-from=file
比较目录时,忽略与文件中包含的任何样式匹配的文件和目录。
-展开-选项卡
输出时将制表符扩展到空白,以保护输入文件的制表符对齐
-f
生成与ed脚本非常相似的输出,但是它们在文件中出现的顺序有所改变
-F正则表达式
在上下文和统一格式中,对于每活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看个块,一些前端行匹配正则表达式。显示。
-前进
像ed脚本一样产生输出,但是它们在文件中出现的顺序被改变了。
-h
这个选项现在没有效果了,它显示了Unix的兼容性。
-H
使用启发式规则来加速具有许多离散小差异的大文件的操作。
-水平线=线
将带有公共前缀的最后一行与带有给定行数的公共或词缀的第一行进行比较。
构成来自拉丁语、结尾为-us的名词的复数
忽略大小写。
-我注册了
忽略由插入和删除行(由regexp参数引用)引起的更改。
-ifdef=名称
合并if-then-else格式输出,预处理宏(由name参数提供)条件。
-忽略所有空间
比较线条时忽略空白。
-忽略空白行
忽略插入和删除空行
忽略大小写
忽略大小写。
-ignore-matching-line=regexp
忽略插入和删除行(由regexp参数引用)。
-忽略-空间-改变
忽略空格数。
-初始-标签
输出制表符而不是文本行前的空格(无论是常规上下文还是格式化上下文)。原因是标签对
齐方式看上去象是常规的一样.-l产生通过 pr 编码的输出.-L label–label=label使用 label 给出的字符在文件头代替文件名输出.–left-column以并列方式印出两公共行的左边–line-format=format使用 format 输出所有的行,在 if-then-else 格式中.–minimal改变算法也许发现变化的一个更小的集合.这会使 diff 变慢 (有时更慢).-n输出 RC-格式 diffs; 除了每条指令指定的行数受影响外 象 -f 一样。-N–new-file在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件.–new-group-format=format使用 format 以if-then-else 格式输出只在第二个文件中取出的一个行组–new-line-format=format使用 format 以if-then-else 格式输出只在第二个文件中取出的一行–old-group-format=format使用 format 以if-then-else 格式输出只在第一个文件中取出的一个行组–old-line-format=format使用 format 使用 format 以if-then-else 格式输出只在第一个文件中取出的一行-p显示带有c函数的改变.-P在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件.–paginate产生通过 pr 编码的输出.-q仅报告文件是否相异,不报告详细的差异.-r当比较目录时,递归比较任何找到的子目录.–rcs输出 RC-格式 diffs; 除了每条指令指定的行数受影响外 象 -f 一样。–recursive当比较目录时,递归比较任何找到的子目录.–report-identical-files-s报告两个文件相同.-S file当比较目录时,由 file 开始. 这用于继续中断了的比较.–sdiff-merge-assist打印附加的信息去帮助 sdiff. sdiff 在运行 diff 时使用这些选项. 这些选项不是特意为使用者直接使用而准备的。–show-c-function显示带有c函数的改变.–show-function-line=regexp在上下文和统一的格式,对于每一大块的差别,显示出匹配 regexp. 的一些前面的行–side-by-side使用并列的输出格式.–speed-large-files使用启发规则加速操作那些有许多离散的小差异的大文件.–starting-file=file当比较目录时,由 file 开始. 这用于继续中断了的比较.–suppress-common-lines在并列格式中不印出公共行。-t在输出时扩展tab为空格,保护输入文件的tab对齐方式-T在文本行(无论是常规的或者格式化的前后文关系)前输出tab代替空格.引起的原因是tab对齐方式看上去象是常规的一样.–text所有的文件都视为文本文件来逐行比较,甚至他们似乎不是文本文件.-u使用统一的输出格式.–unchanged-group-format=format使用 format 输出两个文件的公共行组,其格式是if-then-else.–unchanged-line-format=format使用 format 输出两个文件的公共行,其格式是if-then-else.–unidirectional-new-file在目录比较中,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件.-U lines–unified[=lines]使用前后关系格式输出,显示以指定 行数 (一个整数), 或者是三行(当 行数 没有给出时. 对于正确的操作, 上下文至少要有两行.-v–version输出 diff 版本号.-w在比较行时忽略空格-W columns–width=columns在并列格式输出时,使用指定的列宽.-x pattern比较目录的时候,忽略和目录中与 pattern(样式) 相配的.-X file比较目录的时候,忽略和目录中与任何包含在 file(文件) 的样式相配的文件和目录.-y使用并列格式输出
实例:
假设我们有两个文件(file1 和 file2):
代码如下:
$ cat file1 Hi, Hello, How are you? I am fine, Thank you.
代码如下:
$ cat file2 Hello, Hi, How are you? I am fine.
你可以看见两个文件有些小的不同。现在,让我们看看diff命令如何找出两者的不同的。
像这样运行diff命令:
代码如下:
$ diff file1 file2 1d0 Hi, 4,5c4 I am fine.
你可以看见diff后面跟了两个文件的名字作为命令行的参数,并且它在输出中生成了差异比较。输出并不容易理解。理由是,这是被计算机使用的而不是为了人类。尽管如此,让我们一步步解码输出:
注意 – 在下面的文本中,file1和file2将被当作旧文件和新文件。
代码如下:
1d0
这里,1d0这一行意味着旧文件的第一行应该被删除(d)以使两个文件的第一行同步。旧文件中需要被删除的行以\' Hi,
这里,2a2行意味着新文件中的第二行应该加到旧文件的第二行后。要添加的行显示在输出的下一行用\’>\’标记。
代码如下:
4,5c4 I am fine.
这里,4,5c4这一行意味着在旧文件中的4到5行现在已被改变并且需要用新文件中的第4行代替。添加和删除的行分别用\’>\’和\'
还没有评论,来说两句吧...