五、tee 读取标准输入
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件
双向覆盖重定向
常用参数:
-a | 附加到既有文件的后面,而非覆盖它 |
-i | 忽略中断信号 |
#导出文件中的非注释信息,并且去掉空行,导入bak文件中 [root@localhost data]# grep -v '^#' vsftpd.conf |grep -v '^$' |tee bak anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@localhost data]# cat bak anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@localhost data]#
六、diff 比较文件差异
diff以逐行的方式,比较文本文件的异同处
如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录
选项 | 含义 |
-b | 不检查空格 |
-B | 不检查空白行 |
-i | 不检查大小写 |
-w | 忽略所有的空格 |
--normal | 正常格式显示(默认) |
-c | 上下文格式显示 |
-u | 合并格式显示 |
#文件准备 [root@localhost data]# cat -n file1 1 aaaa 2 111 3 hello world 4 222 5 333 6 bbb [root@localhost data]# cat -n file2 1 aa 2 hello 3 111 4 222 5 bbb 6 333 7 world [root@localhost data]# #diff目的:显示file1如何改变才能和file2匹配 [root@localhost data]# diff file1 file2 1c1,2 第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配 < aaaa 小于号"<"表示左边文件(file1)文件内容 --- ---表示分隔符 > aaa 大于号">"表示右边文件(file2)文件内容 > hello 3d3 第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配 < hello world 5d4 第一个文件的第5行删除后才能和第二个文件的第4行匹配 < 333 6a6,7 第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配 > 333 需要增加的内容在第二个文件里是333和world > world
七、paste 合并
paste命令会把每个文件以列对列的方式,一列列地加以合并 ,他就是相当于把两个不同的文件内容粘贴在一起,形成新的文件。
注意:paste默认粘贴方式以列的方式粘贴,但是并不是不能以行的方式粘贴,加上-s选项就可以行方式粘贴。
常用参数:
-d | 自定义间隔符,默认是tab键 |
-s | 将每个文件粘贴成一行 |
-- | 从标准输入中读取数据 |
#准备文件 [root@localhost data]# cat file1 hello word stevelu [root@localhost data]# cat file2 CSDN 8888 9999yyds #合并查看,以冒号分隔 [root@localhost data]# paste -d: file1 file2 hello word:CSDN stevelu:8888 :9999yyds [root@localhost data]# #横向显示,默认tab键隔开 [root@localhost data]# paste -s file1 file2 hello word stevelu CSDN 8888 9999yyds
paste和cat都不改变原文件,也不生成新文件,个人感觉合并查看用cat就行,paste有点鸡肋
八、tr 字符转换
将字符进行替换、压缩、删除,他可以将一组字符转换成另一组字符。tr他只能从标准输入中读取数据,因此,tr要么将输入文件重定向到标准输入,要么从管道读入数据
注意:tr类似于sed命令,但是比sed简单,所以tr能实现的功能,sed都能实现
语法:
用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
commands|tr 'string1' 'string2'
用法2:tr处理的内容来自文件,记住要使用"<"标准输入
tr 'string1' 'string2' < filename
用法3:匹配string1进行相应操作,如删除操作
tr [options] 'string1' < filename
常用参数:
c | 选定字符串1中字符集的补集,即反选字符串1的补集 |
-d | 删除字符串1中出现的所有字符 |
-s | 删除所有重复出现的字符序列,只保留一个 |
字符串 | 含义 |
a-z或[:lower:] | 匹配所有小写字母 |
A-Z或[:upper:] | 匹配所有大写字母 |
0-9或[:digit:] | 匹配所有数字 |
[:alnum:] | 匹配所有字母和数字 |
[:alpha:] | 匹配所有字母 |
[:blank:] | 所有水平空白 |
[:punct:] | 匹配所有标点符号 |
[:space:] | 所有水平或垂直的空格 |
所有大小写和数字[a-zA-Z0-9]
8.1 替换
注:tr只能一对一替换,不能将一堆替换为一个
8.2 删除
8.3 压缩
九、总结
这里列举的所有工具都不修改原文件
我们在写shell脚本的时候会经常用到这些文本工具,要熟悉一下