diff与patch

diff用于比较两个文件或目录的差异之处,并可以生成补丁(patch)使用patch命令对其进行更新。

diff [选项] [原文件或目录] [修改过的文件或目录]
    对比文件的主要选项:
    -y       并列显示
    -W #   显示宽度,与-y一起使用
    -c       上下问显示
    -u       合并格式显示 
    -i        忽略大小写
    -b       忽略空格字符
    -B       忽略空白行
    -q  --brief     只显示对比结果(相同或不相同)
    -#(num)       显示差异行上下#行

    对目录的主要选项:
    -r         对比子目录中的文件
    -N        若目录中没有文件则使用空文件对比查看

diff有4种显示格式:

  1. 普通格式 (缺省)
  2. 并列格式 (-y)
  3. 上下文格式 (-c)
  4. 合并格式 (-u)

下面将在实例中说明这几种格式的区别:

[root@localhost ~]# cat a
a 
b
c 
 d
E

[root@localhost ~]# cat b
a 
b
c
d
e

使用缺省的普通格式对比文件:
  3,6c3,5 此段表示文件差异的行号(左为源文件)与发送的变化,c表示被修改过,d表示删除,a表示添加
  <表示源文件的内容
  >表示目标文件的内容
 ---为两个文件的分隔符

[root@localhost ~]# diff  a b
3,6c3,5
< c 
<  d
< E
< 
---
> c
> d
> e

输出表明a与b文件的3,5,6被修改过
这样看对比效果并不明显,可以试试并列对比,使用-y选项
并列显示效果:
|   表示被修改过的行
<  表示新增加的行
-W 用于显示两个文件的宽度,可省略

[root@localhost ~]# diff -y -W 50 a b
a                       a
b                       b
c                     | c
 d                    | d 
E                     | e
                      <

使用并列格式看起来舒服很多,还有更舒服的显示方式——基于上下文的显示格式(-c,context)

前两行显示两个文件的基本信息
!  表示该行被修改过
+ 表示该行是新添加的
-  表示该行被删除了
-C 0 基于上下文的格式,默认显示改行前后三行,使用-C 0表示只显示改动的行
注:-C 0 等于 -c -0

[root@localhost ~]# diff -C 0  a b
*** a   2017-12-19 03:05:51.699314704 -0800
--- b   2017-12-19 03:05:30.596297065 -0800
***************
*** 3,6 ****
! c 
!  d
! E
! 
--- 3,5 ----
! c
! d 
! e

基于上下文的对比模式,若文件太大会显示很多 无用的行,所以有了合并模式(-u):
前两行表示文件的简要信息
@@-3,4 +3,3 @@表示文件改动的位置
- 表示第一个文件,a
+ 表示第二个文件,b

[root@localhost ~]# diff -U 0  a b
--- a   2017-12-19 03:05:51.699314704 -0800
+++ b   2017-12-19 03:05:30.596297065 -0800
@@ -3,4 +3,3 @@
-c 
- d
-E
-
+c
+d 
+e

使用diff命令对比出来的差异可以重定向到文件中,作为一个补丁,使用patch同步文件。

patch  [选项] <补丁>
-E   选项说明如果发生了空文件,那么就删除它
-R   取消打过的补丁

例如:

生成补丁:
[root@localhost ~]# diff -U 0  a b >diff.patch
打补丁:
[root@localhost ~]# patch  a diff.patch         指定更改a文件
patching file a
或者
[root@localhost ~]# patch  diff.patch

还原文件:
[root@localhost ~]# patch  a diff.patch 
patching file a
Reversed (or previously applied) patch detected!  Assume -R? [n] y     是否保留原文件

转载于:https://blog.51cto.com/jying/2051643

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值