3. sort工具
sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法和选项
-u:去除重复行-r:降序排列,默认是升序-o : 将排序结果输出到文件中,类似重定向符号>-n:以数字排序,默认是按字符排序-t:分隔符-k:第N列-b:忽略前导空格。-R:随机排序,每次运行的结果均不同
举例说明
#sort-n-t: -k31.txt按照用户的uid进行升序排列#sort-nr-t: -k31.txt按照用户的uid进行降序排列#sort-n2.txt按照数字排序#sort-nu2.txt按照数字排序并且去重#sort-nr2.txt#sort-nru2.txt#sort-nru2.txt#sort-n2.txt-o3.txt按照数字排序并将结果重定向到文件#sort-R2.txt#sort-u2.txt
##4.uniq工具
uniq用于去除**连续的重复**行
常见选项:-i: 忽略大小写-c: 统计重复行次数-d:只显示重复行举例说明:#uniq2.txt#uniq-d2.txt#uniq-dc2.txt
5.tee工具
tee工具是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)
选项:-a双向追加重定向#echohelloworld#echohelloworld|teefile1#catfile1#echo999|tee-afile1#catfile1
6.diff工具
diff工具用于逐行比较文件的不同
注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配。
语法和选项
语法:
diff [选项] 文件1文件2
常用选项:
选项 | 含义 | 备注 |
-b | 不检查空格 | |
-B | 不检查空白行 | |
-i | 不检查大小写 | |
-w | 忽略所有的空格 | |
–normal | 正常格式显示(默认) | |
-c | 上下文格式显示 | |
-u | 合并格式显示 |
举例说明:
比较两个普通文件异同,文件准备:
[root~]#catfile1aaaa111helloworld222333bbb[root~]#[root~]#catfile2aaahello111222bbb333world
1)正常显示
diff目的:file1如何改变才能和file2匹配[root~]#difffile1file21c1,2第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配<aaaa小于号"<"表示左边文件(file1)文件内容------表示分隔符>aaa大于号">"表示右边文件(file2)文件内容>hello3d3第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配<helloworld5d4第一个文件的第5行删除后才能和第二个文件的第4行匹配<3336a6,7第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配>333需要增加的内容在第二个文件里是333和world>world
2)上下文格式显示
[root~]#diff-cfile1file2前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号***表示file1,---表示file2***file12019-04-1616:26:05.748650262+0800---file22019-04-1616:26:30.470646030+0800***************我是分隔符***1,6****以***开头表示file1文件,1,6表示1到6行!aaaa!表示该行需要修改才与第二个文件匹配111-helloworld-表示需要删除该行才与第二个文件匹配222-333-表示需要删除该行才与第二个文件匹配bbb---1,7----以---开头表示file2文件,1,7表示1到7行!aaa表示第一个文件需要修改才与第二个文件匹配!hello表示第一个文件需要修改才与第二个文件匹配111222bbb+333表示第一个文件需要加上该行才与第二个文件匹配+world表示第一个文件需要加上该行才与第二个文件匹配
3)合并格式显示
[root~]#diff-ufile1file2前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号---表示file1,+++表示file2---file12019-04-1616:26:05.748650262+0800+++file22019-04-1616:26:30.470646030+0800-1,6+1,7-aaaa+aaa+hello111-helloworld222-333bbb+333+world
比较两个目录不同
默认情况下也会比较两个目录里相同文件的内容[roottmp]#diffdir1dir2diffdir1/file1dir2/file10a1>helloOnlyindir1: file3Onlyindir2: test1如果只需要比较两个目录里文件的不同,不需要进一步比较文件内容,需要加-q选项[roottmp]#diff-qdir1dir2Filesdir1/file1anddir2/file1differOnlyindir1: file3Onlyindir2: test1
其他小技巧:
有时候我们需要以一个文件为标准,去修改其他文件,并且修改的地方较多时,我们可以通过打补丁的方式完成。
1)先找出文件不同,然后输出到一个文件[root~]#diff-uNfile1file2>file.patch-u:上下文模式-N:将不存在的文件当作空文件2)将不同内容打补丁到文件[root~]#patchfile1file.patchpatchingfilefile13)测试验证[root~]#difffile1file2[root~]#