diff详解,读懂diff结果,主要用它打patch,因为现在都是在Linux上运行在wijdows上diff居多了。

jackxiang 2016-8-24 07:52 | |
一般都要sort排序一下后再比对为好:
sort eee.txt > eeee.txt
sort fff.txt > ffff.txt
diff -c eeee.txt ffff.txt
——————————————————

抄来抄去,直接看这篇文章得了:
http://blog.chinaunix.net/uid-26000296-id-3507646.html

这儿注意大于小于的含义:
diff  cccc.txt dddd.txt
19a20
> 999 备注:大于是指左边文件没有右边有。
而用-c提示相比上面这种方法更直观一些:
diff -c  cccc.txt dddd.txt
*** cccc.txt    2016-12-02 16:00:25.378913370 +0800
--- dddd.txt    2016-12-02 16:00:58.528306679 +0800
***************
*** 17,19 ****
--- 17,20 ----
  10.71.182.93
  10.71.182.96
  10.71.182.99
+ 999


注意:改变位置会在其前面三行和后面三行,因此一共显示7行。
文件内容的每一行最前面,还有一个标记位。如果为空,表示该行无变化;如果是感叹号(!),表示该行有改动;如果是减号(-),表示该行被删除;如果是加号(+),表示该行为新增。
=====================================

假设有两个文件:

//file1.txt

I need to buy apples.

I need to run the laundry.

I need to wash the dog.

I need to get the car detailed.

//file2.txt

I need to buy apples.

I need to do the laundry.

I need to wash the car.

I need to get the dog detailed.

我们使用diff比较他们的不同:diff file1.txt file2.txt


2,4c2,4 前面的数字2,4表示第一个文件中的行,中间有一个字母c表示需要在第一个文件上做的操作(a=add,c=change,d=delete),后面的数字2,4表示第二个文件中的行。

2,4c2,4 的含义是:第一个文件中的第[2,4]行(注意这是一个闭合区间,包括第2行和第4行)需要做出修改才能与第二个文件中的[2,4]行相匹配。接下来的内容则告诉我们需要修改的地方,前面带 < 的部分表示左边文件的第[2,4]行的内容,而带> 的部分表示右边文件的第[2,4]行的内容,中间的 --- 则是两个文件内容的分隔符号。

打patch的比较最常用:
-e 将比较的结果保存成一个ed脚本,之后ed程序可以执行该脚本文件,从而将file1修改成与file2一样的文字内容:
[root@iZ25dcp92ckZ diff]# diff -e 1.txt 2.txt > script.txt
diff: 1.txt: 没有那个文件或目录
diff: 2.txt: 没有那个文件或目录
[root@iZ25dcp92ckZ diff]# diff -e file1.txt file2.txt > script.txt
[root@iZ25dcp92ckZ diff]# cat script.txt
7c
I need to get the dog detailed.
.
5c
I need to wash the car.
.
3c
I need to do the laundry.
.
1c
need to buy apples.
.
[root@iZ25dcp92ckZ diff]#

这样就是生成了一个ed可以执行的脚本文件script.txt,生成脚本文件之后我们还需要做一个操作, 在脚本文件末尾添加ed的write指令,只需要执行 echo "w" >>script.txt 将w指令附加到脚本文件的最后一行即可。

那么如何应用该脚本文件呢,可以这样使用:

ed - file1.txt < script.txt

注意中间的 – 符号表示从标准输入中读取,而 < script.txt 则重定向script.txt的内容到标准输入。这样执行之后1.txt的内容将与2.txt完全相同。

[root@iZ25dcp92ckZ ~]# cd /tmp/diff
[root@iZ25dcp92ckZ diff]#  echo "w" >>script.txt
[root@iZ25dcp92ckZ diff]# ed - file1.txt < script.txt
[root@iZ25dcp92ckZ diff]# diff file1.txt file2.txt
[root@iZ25dcp92ckZ diff]#

比对发现一样,得证。
来自:
【diff详解,读懂diff结果】
http://m.pstatp.com/group/6321440713972171010/?iid=5181229840&app=news_article&tt_from=android_share&utm_medium=toutiao_android&utm_campaign=client_share

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/8910/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2016-12-2 16:11
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]