主頁 > 知識(shí)庫 > 一天一個(gè)shell命令 linux文本操作系列-diff命令詳解

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

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

這又是一個(gè)文件比較命令,熟練掌握會(huì)節(jié)省你很多工作。還記得comm命令嗎?diff比他更加復(fù)雜,好用,不僅能比較文件,還能比較目錄。 當(dāng)一個(gè)文件有多個(gè)版本時(shí)候,或者更多復(fù)雜的文件,目錄比較時(shí),你會(huì)期望有一個(gè)比comm更有用的命令,diff正是為此而生。

全稱:different file

實(shí)例:

文件1: v1.txt

復(fù)制代碼 代碼如下:

hello
  world v1_echo
  v1_diff
  v1_comm
 shell is easy!

文件2: v2.txt

復(fù)制代碼 代碼如下:

hello world!
v2_echo
 v1_diff
 easy shell!

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

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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

"+"表示補(bǔ)充的行,"-"表示刪去的行

3. 更新覆蓋v1.txt,注意這里借用了patch

$patch –p1 v1.txtlt; version.patch

4. 比較v1,v2文件,僅輸出v2的變化

$diff -e v1.txt v2.txt

復(fù)制代碼 代碼如下:

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

5.比較目錄

借用書上一段解釋:

-N 將所有確實(shí)的文件視為空文件
-a 將所有文件市委文件文本
-u 生成一體化輸出
-r 遍歷目錄下的所有文件

比較兩個(gè)目錄下所有文本信息

$diff –Naur directory1 directory2

除非你確定這兩個(gè)目錄基本相同,不然不推薦這么用。

6.工作疲勞后,尤其同時(shí)做很多事情的時(shí)候,會(huì)忘了有沒有做過上傳,或者修改某個(gè)目錄下的文件??梢赃@樣:

$diff v1.txt /${dir}

直接比較同名文件,高強(qiáng)度下的工作者相信真有體會(huì)。

解讀下—help

太長,截取少部分解讀一下。

復(fù)制代碼 代碼如下:

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: 只有兩個(gè)不同是,提示“兩個(gè)文件不同”

-s: 兩個(gè)文件相同時(shí),提示“兩個(gè)文件相同”

$diff -qs v1.txt v2.txt

(有點(diǎn)無聊的命令 )

2. –y

按照列的方式輸出,增加了直觀性

復(fù)制代碼 代碼如下:

 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/
則實(shí)際是v1.txt 與 diff/v1.txt的比較。這是個(gè)很常用的功能。

對(duì)比comm
就比較文件而言,comm功能比較簡(jiǎn)單,但是也很直觀,方便
而diff 提供了更強(qiáng)大,更復(fù)雜的比較方式,還能對(duì)比目錄,遍歷目錄。

復(fù)制代碼 代碼如下:

用法:diff [選項(xiàng)]... 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 是‘-',則由標(biāo)準(zhǔn)輸入讀取內(nèi)容。
如果輸入相同,則退出狀態(tài)為 0;1 表示輸入不同;2 表示有錯(cuò)誤產(chǎn)生。

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

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

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