源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-03-28 15:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:一天一个shell命令 linux文本操作系列-diff命令详解
这又是一个文件比较命令,熟练掌握会节省你很多工作。还记得comm命令吗?diff比他更加复杂,好用,不仅能比较文件,还能比较目录。 当一个文件有多个版本时候,或者更多复杂的文件,目录比较时,你会期望有一个比comm更有用的命令,diff正是为此而生。 全称:different file [b]实例:[/b] 文件1: v1.txt
[u]复制代码[/u] 代码如下:
hello   world v1_echo   v1_diff   v1_comm  shell is easy!
文件2: v2.txt
[u]复制代码[/u] 代码如下:
hello world! v2_echo  v1_diff  easy shell!
[b]1.普通比较:[/b] $diff v1.txt v2.txt
[u]复制代码[/u] 代码如下:
1,2c1,2  < hello world  < v1_echo  ---  > hello world!  > v2_echo  4c4  < v1_comm  ---  > easy shell!
列出比较的区别,数字为行数,c是compare [b]2.一体化输出: [/b] $diff -u v1.txt v2.txt > version.patch
[u]复制代码[/u] 代码如下:
-v1_echo  +hello world!  +v2_echo  v1_diff  -v1_comm  +easy shell!  shell is easy!
"+"表示补充的行,"-"表示删去的行 [b]3. 更新覆盖v1.txt,注意这里借用了patch[/b] $patch –p1 v1.txt< version.patch [b]4. 比较v1,v2文件,仅输出v2的变化[/b] $diff -e v1.txt v2.txt
[u]复制代码[/u] 代码如下:
 4c  easy shell!  .  1,2c  hello world!  v2_echo  .
[b]5.比较目录[/b] 借用书上一段解释: -N 将所有确实的文件视为空文件 -a 将所有文件市委文件文本 -u 生成一体化输出 -r 遍历目录下的所有文件 比较两个目录下所有文本信息 $diff –Naur directory1 directory2 除非你确定这两个目录基本相同,不然不推荐这么用。 [b]6.工作疲劳后,尤其同时做很多事情的时候,会忘了有没有做过上传,或者修改某个目录下的文件。可以这样:[/b] $diff v1.txt /${dir} 直接比较同名文件,高强度下的工作者相信真有体会。 解读下—help 太长,截取少部分解读一下。
[u]复制代码[/u] 代码如下:
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'。
[b]解读:[/b] [b]1.-q –s[/b] -q: 只有两个不同是,提示“两个文件不同” -s: 两个文件相同时,提示“两个文件相同” $diff -qs v1.txt v2.txt (有点无聊的命令 ) [b]2. –y[/b] 按照列的方式输出,增加了直观性
[u]复制代码[/u] 代码如下:
 hello world               | hello world!  v1_echo                    | v2_echo  v1_diff                       v1_diff  v1_comm                   | easy shell!  shell is easy!               shell is easy!
[b]3. file 后面的格式[/b] 可以是1.文件 文件 2.目录与目录 3.文件与目录 4. 目录与文件 解释一下,文件与目录的形式,比较的是该目录下 与 比较文件同名的文件比较 如:$ diff v1.txt diff/ 则实际是v1.txt 与 diff/v1.txt的比较。这是个很常用的功能。 对比comm 就比较文件而言,comm功能比较简单,但是也很直观,方便 而diff 提供了更强大,更复杂的比较方式,还能对比目录,遍历目录。
[u]复制代码[/u] 代码如下:
用法: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 表示有错误产生。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部