• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    一天一个shell命令 linux文本操作系列-diff命令详解

    这又是一个文件比较命令,熟练掌握会节省你很多工作。还记得comm命令吗?diff比他更加复杂,好用,不仅能比较文件,还能比较目录。 当一个文件有多个版本时候,或者更多复杂的文件,目录比较时,你会期望有一个比comm更有用的命令,diff正是为此而生。

    全称:different file

    实例:

    文件1: v1.txt

    复制代码 代码如下:

    hello
      world v1_echo
      v1_diff
      v1_comm
     shell is easy!

    文件2: v2.txt

    复制代码 代码如下:

    hello world!
    v2_echo
     v1_diff
     easy shell!

    1.普通比较:
    $diff v1.txt v2.txt

    复制代码 代码如下:

    1,2c1,2
      hello world
     lt; v1_echo
     ---
     > hello world!
     gt; v2_echo
     4c4
      v1_comm
     ---
     > easy shell!

    列出比较的区别,数字为行数,c是compare

    2.一体化输出:

    $diff -u v1.txt v2.txt gt; version.patch

    复制代码 代码如下:

    -v1_echo
     +hello world!
     +v2_echo
     v1_diff
     -v1_comm
     +easy shell!
     shell is easy!

    "+"表示补充的行,"-"表示删去的行

    3. 更新覆盖v1.txt,注意这里借用了patch

    $patch –p1 v1.txtlt; version.patch

    4. 比较v1,v2文件,仅输出v2的变化

    $diff -e v1.txt v2.txt

    复制代码 代码如下:

     4c
     easy shell!
     .
     1,2c
     hello world!
     v2_echo
     .

    5.比较目录

    借用书上一段解释:

    -N 将所有确实的文件视为空文件
    -a 将所有文件市委文件文本
    -u 生成一体化输出
    -r 遍历目录下的所有文件

    比较两个目录下所有文本信息

    $diff –Naur directory1 directory2

    除非你确定这两个目录基本相同,不然不推荐这么用。

    6.工作疲劳后,尤其同时做很多事情的时候,会忘了有没有做过上传,或者修改某个目录下的文件。可以这样:

    $diff v1.txt /${dir}

    直接比较同名文件,高强度下的工作者相信真有体会。

    解读下—help

    太长,截取少部分解读一下。

    复制代码 代码如下:

    Mandatory arguments to long options are mandatory for short options too.
     --normal                                        output a normal diff (the default)
     -q, --brief                                      report only when files differ
     -s, --report-identical-files               report when two files are the same
     -c, -C NUM, --context[=NUM]   output NUM (default 3) lines of copied context
     -u, -U NUM, --unified[=NUM]     output NUM (default 3) lines of unified context
     -e, --ed                                          output an ed script
     -n, --rcs                                         output an RCS format diff
     -y, --side-by-side                           output in two columns

    FILES 的格式可以是‘FILE1 FILE2'、‘DIR1 DIR2'、‘DIR FILE...'或
    ‘FILE... DIR'。

    解读:

    1.-q –s

    -q: 只有两个不同是,提示“两个文件不同”

    -s: 两个文件相同时,提示“两个文件相同”

    $diff -qs v1.txt v2.txt

    (有点无聊的命令 )

    2. –y

    按照列的方式输出,增加了直观性

    复制代码 代码如下:

     hello world               | hello world!
     v1_echo                    | v2_echo
     v1_diff                       v1_diff
     v1_comm                   | easy shell!
     shell is easy!               shell is easy!

    3. file 后面的格式

    可以是1.文件 文件 2.目录与目录 3.文件与目录 4. 目录与文件
    解释一下,文件与目录的形式,比较的是该目录下 与 比较文件同名的文件比较
    如:$ diff v1.txt diff/
    则实际是v1.txt 与 diff/v1.txt的比较。这是个很常用的功能。

    对比comm
    就比较文件而言,comm功能比较简单,但是也很直观,方便
    而diff 提供了更强大,更复杂的比较方式,还能对比目录,遍历目录。

    复制代码 代码如下:

    用法:diff [选项]... FILES
    Compare FILES line by line.

    Mandatory arguments to long options are mandatory for short options too.
          --normal                  output a normal diff (the default)
      -q, --brief                   report only when files differ
      -s, --report-identical-files  report when two files are the same
      -c, -C NUM, --context[=NUM]   output NUM (default 3) lines of copied context
      -u, -U NUM, --unified[=NUM]   output NUM (default 3) lines of unified context
      -e, --ed                      output an ed script
      -n, --rcs                     output an RCS format diff
      -y, --side-by-side            output in two columns
      -W, --width=NUM               output at most NUM (default 130) print columns
          --left-column             output only the left column of common lines
          --suppress-common-lines   do not output common lines

      -p, --show-c-function         show which C function each change is in
      -F, --show-function-line=RE   show the most recent line matching RE
          --label LABEL             use LABEL instead of file name
                                      (can be repeated)

      -t, --expand-tabs             expand tabs to spaces in output
      -T, --initial-tab             make tabs line up by prepending a tab
          --tabsize=NUM             tab stops every NUM (default 8) print columns
          --suppress-blank-empty    suppress space or tab before empty output lines
      -l, --paginate                pass output through `pr' to paginate it

      -r, --recursive                 recursively compare any subdirectories found
      -N, --new-file                  treat absent files as empty
          --unidirectional-new-file   treat absent first files as empty
          --ignore-file-name-case     ignore case when comparing file names
          --no-ignore-file-name-case  consider case when comparing file names
      -x, --exclude=PAT               exclude files that match PAT
      -X, --exclude-from=FILE         exclude files that match any pattern in FILE
      -S, --starting-file=FILE        start with FILE when comparing directories
          --from-file=FILE1           compare FILE1 to all operands;
                                        FILE1 can be a directory
          --to-file=FILE2             compare all operands to FILE2;
                                        FILE2 can be a directory

      -i, --ignore-case               ignore case differences in file contents
      -E, --ignore-tab-expansion      ignore changes due to tab expansion
      -Z, --ignore-trailing-space     ignore white space at line end
      -b, --ignore-space-change       ignore changes in the amount of white space
      -w, --ignore-all-space          ignore all white space
      -B, --ignore-blank-lines        ignore changes whose lines are all blank
      -I, --ignore-matching-lines=RE  ignore changes whose lines all match RE

      -a, --text                      treat all files as text
          --strip-trailing-cr         strip trailing carriage return on input

      -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 可以是‘old'、‘new'或‘unchanged'。GTYPE 可以是 LTYPE 的选择
        或是‘changed'。
        GFMT (only) may contain:
          %  lines from FILE1
          %>  lines from FILE2
          %=  lines common to FILE1 and FILE2
          %[-][WIDTH][.[PREC]]{doxX}LETTER  printf-style spec for LETTER
            LETTERs are as follows for new group, lower case for old group:
              F  first line number
              L  last line number
              N  number of lines = L-F+1
              E  F-1
              M  L+1
          %(A=B?T:E)  if A equals B then T else E
        LFMT (only) may contain:
          %L  contents of line
          %l  contents of line, excluding any trailing newline
          %[-][WIDTH][.[PREC]]{doxX}n  printf-style spec for input line number
        Both GFMT and LFMT may contain:
          %%  %
          %c'C'  the single character C
          %c'\OOO'  the character with octal code OOO
          C    the character C (other characters represent themselves)

      -d, --minimal            try hard to find a smaller set of changes
          --horizon-lines=NUM  keep NUM lines of the common prefix and suffix
          --speed-large-files  assume large files and many scattered small changes

          --help               display this help and exit
      -v, --version            output version information and exit

      FILES 的格式可以是‘FILE1 FILE2'、‘DIR1 DIR2'、‘DIR FILE...'或
          ‘FILE... DIR'。
    If --from-file or --to-file is given, there are no restrictions on FILE(s).
    如果 FILE 是‘-',则由标准输入读取内容。
    如果输入相同,则退出状态为 0;1 表示输入不同;2 表示有错误产生。

    您可能感兴趣的文章:
    • shell中常用的命令之diff和patch用法
    上一篇:一天一个shell命令 linux文本系列-file命令用法
    下一篇:一天一个shell命令 linux文件操作系列-ln命令详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    一天一个shell命令 linux文本操作系列-diff命令详解 一天,一个,shell,命令,linux,