tr
支持重定向,实现转换或删除字符功能
命令格式 tr [OPTION]… SET1 [SET2]
常用参数选项
-d --delete 删除所有属于第一字符集中的字符
-t --truncate-set1 将第一个字符集中对应的字符转化为第二个字符集中对应的字符
-s --squeeze-repeats 将连续重复的字符去重,以单独一个字符表示
-c -C --complement 取字符集的补集,取反
[字符1-字符2] 从字符1 到字符2 的升序递增过程中经过的所有字符,例如:'a-z','0-9'
\\ 反斜杠 \
\a 警告声,终端鸣响
\b 退格键
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
[:alnum:] 字母和数字
[:alpha:] 字母
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:space:] 空白字符
[:print:] 可打印字符,包括空格
[:punct:] 标点符号
[:graph:] 图形字符,不包括空格
[:cntrl:] 控制(非打印)字符
[:xdigit:] 十六进制字符
范例
#该命令会把/etc/issue 中的小写字符都转换成大写字符
[root@centos8 data]#tr 'a-z' 'A-Z' < /etc/issue
#删除fstab文件中的所有abc中任意字符
[root@centos8 data]#tr -d abc < /etc/fstab
#删除除了ace中的字符,只保留ace
[root@centos8 data]#tr -dc 'ace'
abcefe1232443
acee[root@centos8 data]#
#删除fstab文件中的所有字母
[root@centos8 data]#tr -d '[:alpha:]' < /etc/fstab
#
# //
# 30 09:33:14 2020
#
# , , '///'.
# (5), (8), (8) / (8) .
#
# , ' -'
# .
#
=75303-925-49-77-39466618 / 0 0
=1672-59-483-7-79043186 / 4 1 2
=1805-775-407-3-4391179 / 0 0
=009821-957-41-48-87839713 0 0
#将文件中的连续空格替换为一个空格
[root@centos8 data]#df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 989668 0 989668 0% /dev
tmpfs 1006108 0 1006108 0% /dev/shm
tmpfs 1006108 8872 997236 1% /run
tmpfs 1006108 0 1006108 0% /sys/fs/cgroup
/dev/nvme0n1p2 104806400 2200788 102605612 3% /
/dev/nvme0n1p5 31441920 252408 31189512 1% /data
/dev/nvme0n1p1 999320 114404 816104 13% /boot
tmpfs 201220 0 201220 0% /run/user/0
[root@centos8 data]#df > df.log
[root@centos8 data]#tr -s ' ' < df.log
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 989668 0 989668 0% /dev
tmpfs 1006108 0 1006108 0% /dev/shm
tmpfs 1006108 8872 997236 1% /run
tmpfs 1006108 0 1006108 0% /sys/fs/cgroup
/dev/nvme0n1p2 104806400 2200788 102605612 3% /
/dev/nvme0n1p5 31441920 252408 31189512 1% /data
/dev/nvme0n1p1 999320 114404 816104 13% /boot
tmpfs 201220 0 201220 0% /run/user/0
#将windows 记事本建立的文本文件转换成linux格式的文本文件
[root@centos8 data]#tr -d '\r' < win.txt > linux.txt
#把文本中的换行符转换为+号,做数学运算
[root@centos8 ~]#echo {1..100} | tr ' ' '+' | bc
管道
管道用来连接多个命令,使用符号 |
表示
命令格式:命令1 | 命令2 | 命令3 | …
功能说明
1 将命令1 的STDOUT(标准输出)发送给命令2的STDIN(标准输入)来处理,命令2的STDOUT发送给命令3的STDIN来处理
2 所有命令会在当前shell 进程的子shell 进程中执行
3 具有组合多种工具的功能
**注意:**STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
命令1 2>&1 | 命令2
命令1 |& 命令2
范例
#将字母转换成大写字母,注意:错误输出没有转换
[root@centos8 ~]#ls /data /xxx | tr 'a-z' 'A-Z'
ls: cannot access '/xxx': No such file or directory
/DATA:
F11.TXT
F1.TXT
F2.TXT
#将字母转换成大写字母,使用格式:命令1 2>&1 | 命令2
[root@centos8 ~]#ls /data /xxx 2>&1 | tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXX': NO SUCH FILE OR DIRECTORY
/DATA:
F11.TXT
F1.TXT
F2.TXT
#将字母转换成大写字母,使用格式:命令1 |& 命令2
[root@centos8 ~]#ls /data /xxx |& tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXX': NO SUCH FILE OR DIRECTORY
/DATA:
F11.TXT
F1.TXT
F2.TXT
#把文本中的换行符转换为+号,做数学运算
[root@centos8 ~]#seq -s + 1 100 | bc
[root@centos8 ~]#seq -s + 1 2 100 | bc
#修改用户密码
[root@centos8 ~]#echo Ad1234 | passwd --stdin dawn &> /dev/null
[root@centos8 ~]#echo Ad1234 | passwd --stdin dawn
[root@centos8 ~]#cat password.txt | passwd --stdin dawn
[root@centos8 ~]#passwd --stdin dawn < password.txt
tee
可接收标准输入,并重定向到多个目标,经常配合管道符一起使用。可实现同时将数据流分送到文件和终端
作用
1 保存不同阶段的输出
2 复杂管道的故障排除
2 同时查看和记录输出
命令格式 tee [OPTION]… [FILE]…
常用命令参数
-a 追加,默认是覆盖
将命令1 的stdout 保存在文件中,做为命令2 的输入
命令1 | tee [-a] 文件名 | 命令2
范例
[root@centos8 ~]#hostname | tee -a tee.log | tr 'a-z' 'A-Z'
CENTOS8.DAWN
[root@centos8 ~]#cat tee.log
centos8.dawn
重定向中的符号 -
#将文件内容打包,但打包的数据不记录到文件,而是传给stdout,经过管道后,将tar -cvf - /home 传送给后面的tar -xvf -,后面的这个 - 则是取前面一个命令的stdout,因此,就不需要用临时文件了
[root@centos8 ~]#tar -cvf - /home | tar -xvf -