主頁 > 知識庫 > 一天一個shell命令 linux文本操作系列-diff命令詳解

一天一個shell命令 linux文本操作系列-diff命令詳解

熱門標簽:商機地圖標注 百度地圖標注直線距離 德陽400電話申請 測繪地圖標注名稱 智能電銷機器人有用嗎 外呼電話系統(tǒng)怎么操作 怎么在百度地圖標注公司的位置 天津電話外呼系統(tǒng)排名 鶴崗400電話申請

這又是一個文件比較命令,熟練掌握會節(jié)省你很多工作。還記得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!

列出比較的區(qū)別,數(shù)字為行數(shù),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 是‘-',則由標準輸入讀取內(nèi)容。
如果輸入相同,則退出狀態(tài)為 0;1 表示輸入不同;2 表示有錯誤產(chǎn)生。

您可能感興趣的文章:
  • shell中常用的命令之diff和patch用法

標簽:鎮(zhèn)江 六盤水 丹東 滁州 百色 武漢 優(yōu)質(zhì)小號 自貢

巨人網(wǎng)絡(luò)通訊聲明:本文標題《一天一個shell命令 linux文本操作系列-diff命令詳解》,本文關(guān)鍵詞  一天,一個,shell,命令,linux,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一天一個shell命令 linux文本操作系列-diff命令詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于一天一個shell命令 linux文本操作系列-diff命令詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章