溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中diff命令有什么用

發(fā)布時間:2021-08-26 14:56:11 來源:億速云 閱讀:217 作者:小新 欄目:開發(fā)技術

這篇文章主要為大家展示了“l(fā)inux中diff命令有什么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“l(fā)inux中diff命令有什么用”這篇文章吧。

這又是一個文件比較命令,熟練掌握會節(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.txt&lt; 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 是‘-',則由標準輸入讀取內容。
如果輸入相同,則退出狀態(tài)為 0;1 表示輸入不同;2 表示有錯誤產(chǎn)生。

以上是“l(fā)inux中diff命令有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI