Linux diff tr tee 命令
2017-12-31 23:05
423 查看
diff比较两文件或目录的不同之处
而且都是以第一个文件来作为操作对象:
第一个文件与第二个文件相比多的,要删除,少的要增加。就是最后会把第一个文件变得的第二个文件一样。
举例两文件1.txt和2.txt:
![](http://s1.51cto.com/images/20171231/1514732046725126.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://s1.51cto.com/images/20171231/1514732051198289.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
1d0:第一个文件第一行删除才和第二个文件第0行一样(才就是最开头行)
< Hi,
2a2:第一个文件第二行增加才和第二个文件第二行一样
> Hi,
4,5c4:第一个文件第四,五行改变才和第二个文件第四行一样
< I am fine,
< Thank you.
---
> I am fine.
'<'代表删除的行,而'>'代表添加的行。
![](http://s1.51cto.com/images/20171231/1514732145916774.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
y或--side-by-side 以并列的方式显示文件的异同之处。
-W<宽度>或--width<宽度> 在使用-y参数时,指定栏宽。“|”表示前后2个文件内容有不同“<”表示后面文件比前面文件少了1行内容“>”表示后面文件比前面文件多了1行内容
![](http://s1.51cto.com/images/20171231/1514732180655208.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-c 显示全部内文,并标出不同之处。
“+” 表示后面的文件比前面多了1行内容 “-” 表示后面的文件比前面少了1行内容“!” 表示前后2个文件内容有不同 "---"表示变动前的文件,"+++"表示变动后的文件
![](http://s1.51cto.com/images/20171231/1514732204453418.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-q或--brief 仅显示有无差异,不显示详细的信息。
![](http://s1.51cto.com/images/20171231/1514732223526028.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-u,-U或--unified= 以合并的方式来显示文件内容的不同。
前面的"-1,5"分成三个部分:减号表示第一个文件,"1"表示第1行,"5"表示连续5行。合在一起,就表示下面是第一个文件从第1行开始的连续5行。同样的,"+1,4"表示变动后,成为第二个文件从第1行开始的连续4行。
如何理解,下图:
![](http://s1.51cto.com/images/20171231/1514732241947979.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://s1.51cto.com/images/20171231/1514732246924895.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
如果两个文件含有相同的文本但是大小写不同,diff命令仍会默认报告它不同
-i 忽略大小写
但这样就会没有输出生成,因为当两个文件相同时的默认行为,如果想看到提示说相同的话:
-s 选项报告两个文件相同
![](http://s1.51cto.com/images/20171231/1514732265665029.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
使用 -b 忽略空格比较两个文件不同,并生产补丁
![](http://s1.51cto.com/images/20171231/1514732286850310.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
除了文件外,diff命令还可以比较两个目录
![](http://s1.51cto.com/images/20171231/1514732302176057.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
vimdiff
只有一个文件中有的行,颜色相对
两个文件中都存在,但是包含差异的行为一种颜色,引起差异还会加字体背景
![](http://s1.51cto.com/images/20171231/1514732317965074.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
ctrl + w + w 左右切换 或者上下切换
dp 把左边光标所在的行复制到右边对应的行
do 把右边的复制到左边光标所在的对应的行
https://jingyan.baidu.com/article/ae97a646da05debbfd461d33.html
tr
容易地实现 sed 的许多最基本功能。
可以用一个字符来替换另一个字符,或者可以完全除去一些字符。也可以用来除去重复字符
![](http://s1.51cto.com/images/20171231/1514732359853168.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
逐个字符的替换且替换不修改源文件
![](http://s1.51cto.com/images/20171231/1514732441921541.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
小写替换成大写
![](http://s1.51cto.com/images/20171231/1514732394797799.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
去除Z的字符
![](http://s1.51cto.com/images/20171231/1514732468712383.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
删除换行符
PS:不可见字符都得用转义字符来表示的,这个都是统一的
![](http://s1.51cto.com/images/20171231/1514732508913791.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
将换行符替换成:
![](http://s1.51cto.com/images/20171231/1514732527618217.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
除了a-z 以及换行符以外的,都删除
除了1-2数字以外的,都删除
![](http://s1.51cto.com/images/20171231/1514732557630540.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
删除重复的
tee
我们平常比如 ls >a.txt,这时我们就不能看到输出了
ls | tee /tmp/ls.txt
-a 追加输入
![](http://s1.51cto.com/images/20171231/1514732584735222.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://s1.51cto.com/images/20171231/1514732665288739.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
把标准错误也输入到文件里
![](http://s1.51cto.com/images/20171231/1514732689741095.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
虽然重复打印,但追加到文件中的只有一次
而且都是以第一个文件来作为操作对象:
第一个文件与第二个文件相比多的,要删除,少的要增加。就是最后会把第一个文件变得的第二个文件一样。
举例两文件1.txt和2.txt:
![](http://s1.51cto.com/images/20171231/1514732046725126.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://s1.51cto.com/images/20171231/1514732051198289.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
1d0:第一个文件第一行删除才和第二个文件第0行一样(才就是最开头行)
< Hi,
2a2:第一个文件第二行增加才和第二个文件第二行一样
> Hi,
4,5c4:第一个文件第四,五行改变才和第二个文件第四行一样
< I am fine,
< Thank you.
---
> I am fine.
'<'代表删除的行,而'>'代表添加的行。
![](http://s1.51cto.com/images/20171231/1514732145916774.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
y或--side-by-side 以并列的方式显示文件的异同之处。
-W<宽度>或--width<宽度> 在使用-y参数时,指定栏宽。“|”表示前后2个文件内容有不同“<”表示后面文件比前面文件少了1行内容“>”表示后面文件比前面文件多了1行内容
![](http://s1.51cto.com/images/20171231/1514732180655208.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-c 显示全部内文,并标出不同之处。
“+” 表示后面的文件比前面多了1行内容 “-” 表示后面的文件比前面少了1行内容“!” 表示前后2个文件内容有不同 "---"表示变动前的文件,"+++"表示变动后的文件
![](http://s1.51cto.com/images/20171231/1514732204453418.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-q或--brief 仅显示有无差异,不显示详细的信息。
![](http://s1.51cto.com/images/20171231/1514732223526028.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-u,-U或--unified= 以合并的方式来显示文件内容的不同。
前面的"-1,5"分成三个部分:减号表示第一个文件,"1"表示第1行,"5"表示连续5行。合在一起,就表示下面是第一个文件从第1行开始的连续5行。同样的,"+1,4"表示变动后,成为第二个文件从第1行开始的连续4行。
如何理解,下图:
![](http://s1.51cto.com/images/20171231/1514732241947979.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://s1.51cto.com/images/20171231/1514732246924895.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
如果两个文件含有相同的文本但是大小写不同,diff命令仍会默认报告它不同
-i 忽略大小写
但这样就会没有输出生成,因为当两个文件相同时的默认行为,如果想看到提示说相同的话:
-s 选项报告两个文件相同
![](http://s1.51cto.com/images/20171231/1514732265665029.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
使用 -b 忽略空格比较两个文件不同,并生产补丁
![](http://s1.51cto.com/images/20171231/1514732286850310.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
除了文件外,diff命令还可以比较两个目录
![](http://s1.51cto.com/images/20171231/1514732302176057.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
vimdiff
只有一个文件中有的行,颜色相对
两个文件中都存在,但是包含差异的行为一种颜色,引起差异还会加字体背景
![](http://s1.51cto.com/images/20171231/1514732317965074.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
ctrl + w + w 左右切换 或者上下切换
dp 把左边光标所在的行复制到右边对应的行
do 把右边的复制到左边光标所在的对应的行
https://jingyan.baidu.com/article/ae97a646da05debbfd461d33.html
tr
容易地实现 sed 的许多最基本功能。
可以用一个字符来替换另一个字符,或者可以完全除去一些字符。也可以用来除去重复字符
![](http://s1.51cto.com/images/20171231/1514732359853168.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
逐个字符的替换且替换不修改源文件
![](http://s1.51cto.com/images/20171231/1514732441921541.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
小写替换成大写
![](http://s1.51cto.com/images/20171231/1514732394797799.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
去除Z的字符
![](http://s1.51cto.com/images/20171231/1514732468712383.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
删除换行符
PS:不可见字符都得用转义字符来表示的,这个都是统一的
![](http://s1.51cto.com/images/20171231/1514732508913791.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
将换行符替换成:
![](http://s1.51cto.com/images/20171231/1514732527618217.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
除了a-z 以及换行符以外的,都删除
除了1-2数字以外的,都删除
![](http://s1.51cto.com/images/20171231/1514732557630540.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
删除重复的
tee
我们平常比如 ls >a.txt,这时我们就不能看到输出了
ls | tee /tmp/ls.txt
-a 追加输入
![](http://s1.51cto.com/images/20171231/1514732584735222.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://s1.51cto.com/images/20171231/1514732665288739.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
把标准错误也输入到文件里
![](http://s1.51cto.com/images/20171231/1514732689741095.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
虽然重复打印,但追加到文件中的只有一次
相关文章推荐
- Linux-tee_tr_split命令
- Linux下Bash的管线pipe命令,cut,grep,sort,wc,uniq,tee,tr,col,join,past,expand
- Linux——note shell常用命令 cut 、sort、unqi、tee、tr、split和shell中连接符&& ||
- Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs
- Linux下Bash的管线pipe命令,cut,grep,sort,wc,uniq,tee,tr,col,join,past,expand
- linux的cut、sort_wc_uniq、tee_tr_split命令及一些特殊符号介绍
- Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs
- Linux下Bash的管线pipe命令,cut,grep,sort,wc,uniq,tee,tr,col,join,past,expand
- linux学习第二十五篇:cut,sort,wc,uniq,tee,tr,split命令,shell特殊符号
- Linux基础之IO重定向及管道详解(涉及tr、tee命令)
- Linux基础之IO重定向及管道详解(涉及tr、tee命令)
- linux-12基本命令之 cat,more,head, tail ,tr,od,wc,cut,diff
- linux命令学习 --tee
- 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下
- linux下uniq和tee命令
- 在linux中对一个没有权限的文件强制修改保存的命令:w !sudo tee %
- Linux下tr命令详解
- Linux下tr命令“字符”处理的实用例子
- linux下Diff命令使用方法
- 《tr命令-优化版》-linux命令五分钟系列之二十五