1. <i id='5ujuo'></i>
        <ins id='5ujuo'></ins>

        <span id='5ujuo'></span>
          <fieldset id='5ujuo'></fieldset>

          <code id='5ujuo'><strong id='5ujuo'></strong></code>

            <dl id='5ujuo'></dl>

          1. <i id='5ujuo'><div id='5ujuo'><ins id='5ujuo'></ins></div></i>
            <acronym id='5ujuo'><em id='5ujuo'></em><td id='5ujuo'><div id='5ujuo'></div></td></acronym><address id='5ujuo'><big id='5ujuo'><big id='5ujuo'></big><legend id='5ujuo'></legend></big></address>
          2. <tr id='5ujuo'><strong id='5ujuo'></strong><small id='5ujuo'></small><button id='5ujuo'></button><li id='5ujuo'><noscript id='5ujuo'><big id='5ujuo'></big><dt id='5ujuo'></dt></noscript></li></tr><ol id='5ujuo'><table id='5ujuo'><blockquote id='5ujuo'><tbody id='5ujuo'></tbody></blockquote></table></ol><u id='5ujuo'></u><kbd id='5ujuo'><kbd id='5ujuo'></kbd></kbd>

            Linux下用于对比文件的diff命令使用教程

            • 时间:
            • 浏览:11
            • 来源:124软件资讯网

                总览

                diff [选项] 源文件 目的文件

                形貌

                在最简朴的情形是, diff 比力两个文件的内容 (源文件 和 目的文件). 文件名可以是 - 由尺度输入装备读入的文本. 作为特殊的情形是, diff - - 比力一份尺度输入的它自己的拷贝若是 源文件 是一个目录和 目的文件 不是(目录), diff 会比力在 源文件(目录) 里的文件的中和 目的文件同名的(文件), 反过来也一样. 非目录文件不能是 -. 若是 源文件 和 目的文件 都是目录, diff 比力两个目录中响应的文件  ,遵照字母序次排序;这个比力是不会递归的  ,除非给出 -r 或者 --recursive. diff 不把一个目录的内容看为它是一个文件来比力  。被指定的文件不能是尺度的输入, 由于尺度的输入是无名的而且"有一样的名字的文件"的看法不适用  。 diff 的选项由 -, 最先以是正常地 源文件(名) 和 目的文件(名) 不行以用 - 开头. 然而, -- 可以被它视为保留的纵然作为文件名的开头( they begin with -.)

                选项

                下面是 GNU所接受的 diff 的所有选项的提要. 大多数的选项有两个相同的名字,一个是单个的跟在 - 后面字母, 另一个是由 -- 引出的长名字. 多个单字母选项(除非它们发生歧义)能够组合为单行的下令行语法 -ac 是等同于 -a -c. 长寿名的选项能被缩短到他们的名字的任何唯一的前缀. 用 ([ 和 ]) 括起来显示选项发生歧义的选项

                -行数(一个整数)

                显示上下文 行数 (一个整数). 这个选项自身没有指定输特别式 ,这是没有用果的  ,除非和 -c 或者 -u 组合使用. 这是已废置的选项  ,对于准确的操作, 上下文至少要有两行  。

                -a

                所有的文件都视为文本文件来逐行比力  ,甚至他们似乎不是文本文件.

                -b

                忽略空格引起的转变.

                -B

                忽略插入删除空行引起的转变.

                --brief

                仅陈诉文件是否相异,在乎差异的细节.

                -c

                使用上下文输特别式.

                -C 行数(一个整数)

                --context[=lines]

                使用上下文输特别式  ,显示以指定 行数 (一个整数), 或者是三行(当 行数 没有给出时. 对于准确的操作, 上下文至少要有两行.

                --changed-group-format=format

                使用 format 输出一组包罗两个文件的差别处的行 ,其花样是 if-then-else .

                -d

                改变算法也许发现转变的一个更小的荟萃.这会使 diff 变慢 (有时更慢).

                -D name

                合并 if-then-else 花样输出, 预处置惩罚宏(由name参数提供)条件.

                -e

                --ed

                输出为一个有用的 ed 剧本.

                --exclude=pattern

                比力目录的时间  ,忽略和目录中与 pattern(样式) 相配的.

                --exclude-from=file

                比力目录的时间 ,忽略和目录中与任何包罗在 file(文件) 的样式相配的文件和目录.

                --expand-tabs

                在输出时扩展tab为空格  ,掩护输入文件的tab对齐方式

                -f

                发生一个很象 ed 剧本的输出  ,可是可是在他们在文件泛起的顺序有改变

                -F regexp

                在上下文和统一花样中  ,对于每一大块的差别  ,显示出匹配 regexp. 的一些前面的行.

                --forward-ed

                发生象 ed 剧本的输出  ,可是它们在文件泛起的顺序有改变  。

                -h

                这选项现在已没作用  ,它出现Unix的兼容性.

                -H

                使用启发规则加速操作那些有许多离散的小差异的大文件.

                --horizon-lines=lines

                比力给定行数的有配合前缀的最后行  ,和有配合或缀的最前行.

                -i

                忽略巨细写.

                -I regexp

                忽略由插入 ,删除行(由regexp 参数提供参考)带来的改变.

                --ifdef=name

                合并 if-then-else 花样输出, 预处置惩罚宏(由name参数提供)条件.

                --ignore-all-space

                在比力行的时间忽略空缺.

                --ignore-blank-lines

                忽略插入和删除空行

                --ignore-case

                忽略巨细写.

                --ignore-matching-lines=regexp

                忽略插入删除行(由regexp 参数提供参考).

                --ignore-space-change

                忽略空缺的数目.

                --initial-tab

                在文本行(无论是通例的或者花样化的前后文关系)前输出tab取代空格. 引起的缘故原由是tab对齐方式看上去象是通例的一样.

                -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,

                2a2

                > Hi,

                4,5c4

                < I am fine,

                < Thank you.

                ---

                > I am fine.

                你可以瞥见diff后面跟了两个文件的名字作为下令行的参数  ,而且它在输出中天生了差异比力  。输出并不容易明白 。理由是  ,这是被盘算机使用的而不是为了人类 。只管云云  ,让我们一步步解码输出:

                注重 – 在下面的文本中  ,file1和file2将被看成旧文件和新文件  。

                代码如下:

                1d0

                < Hi,

                这里  ,1d0这一行意味着旧文件的第一行应该被删除(d)以使两个文件的第一行同步  。旧文件中需要被删除的行以'<'标志  。

                代码如下:

                2a2

                > Hi,

                这里 ,2a2行意味着新文件中的第二行应该加到旧文件的第二行后  。要添加的行显示在输出的下一行用'>'标志 。

                代码如下:

                4,5c4

                < I am fine,

                < Thank you.

                ---

                > I am fine.

                这里 ,4,5c4这一行意味着在旧文件中的4到5行现在已被改变而且需要用新文件中的第4行取代 。添加和删除的行划分用'>'和'<'表现  。

                那么 ,来总结一下  ,

                首先diff下令的第一个参数被视为旧文件而第二个参数被视为新文件 。

                像1d0、2a2、4,5c4这种表达式可以用语法解码为 [旧文件的行号或者行的规模][行为][新文件的行号或者行的规模]  。这里的'行为'可以是追加,删除或者改变替换  。

                '<'代表删除的行  ,而'>'代表添加的行  。

                除了文件外  ,diff下令还可以比力两个目录 。让我们通过一个例子学习  。

                这里是'new_dir'目录包罗的内容:

                代码如下:

                $ ls new_dir/

                file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt

                file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

                这是'orig_dir'目录含有的内容:(译注:原文为and here are the contents of a directory named ‘olddir’  ,其中'olddir'应为笔误  。)

                代码如下:

                $ ls orig_dir/

                file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test

                file2 frnd frnd1.cpp log1.txt log3.txt log5.txt

                下面是diff下令执行后的输出:

                代码如下:

                $ diff new_dir/ orig_dir/

                Only in new_dir/: file

                Only in orig_dir/: test

                你可以看到当diff下令被用来比力这两个目录时  ,很容易就会显示两个文件中缺失的文件  。

                下面是一些在下令行下常用的选项:

                1. 用 -i 忽略巨细写

                若是两个文件含有相同的文本可是巨细写差别 ,diff下令仍会默认陈诉它差别  。

                好比:

                代码如下:

                $ cat file1

                HI

                $ cat file2

                hi

                $ diff file1 file2

                1c1

                < HI

                ---

                > hi

                你可以瞥见diff下令在输出中陈诉了巨细写差别 。

                要去除这个默认行为  ,使用-i选项 。

                以下是个例子:

                代码如下:

                $ diff -i file1 file2

                这样你可以看到没有天生输出  ,这是当两个文件相同时的默认行为  。

                2. 用 -s 选项陈诉两个文件相同

                在例子1的后面  ,我们看到若是文件相同diff不会天生陈诉  。虽然这个默认行为不错可是它仍可能会造成很大疑惑  ,特殊对于新手而言  。因此  ,若是你像样diff下令明确地陈诉两个文件差别  ,那么就使用-s下令选项  。

                来举个例子:

                代码如下:

                $ diff -is file1 file2

                Files file1 and file2 are identical

                你可以看到我加了-s选项在后面的例子中 ,这次diff下令会明确地陈诉两个文件是相同的  。

                3. 使用 -b 忽略空格

                另外一个常用的是diff陈诉文件存在差别数目的空格 。

                举例说明:

                代码如下:

                $ cat file1

                Hi, how are you?

                $ cat file2

                Hi, how are you?

                视察这两个文件唯一的差别是file2中'are'和'you'之间分外的空格  。现在 ,当使用diff下令比力两个文件时  ,输出如下:

                代码如下:

                $ diff file1 file2

                1c1

                < Hi, how are you?

                ---

                > Hi, how are you?

                因此你可以看到diff下令陈诉了差别 。可是若是你想要忽略这些空格  ,使用 -b 选项  。

                代码如下:

                $ diff -b file1 file2

                这样你可以看到由于-b选项 ,diff下令陈诉这两个文件是相同的  。