【原文链接】Linux----tr命令详细使用方法
文章目录
- 一、tr命令使用方法
- 1.1 tr命令的作用
- 1.2 tr命令格式
- 1.3 tr命令常用的选项
- 1.4 常用的匹配字符串
- 二、tr命令常用实例
- 2.1 如何查看文本中的控制字符
- 2.2 将所有小写字母转换为大写字母
- 2.3 将文件中的数字替换为&符号
- 2.4 对命令执行结果中的冒号替换为tab制表符
- 2.5 删除文件中的所有小写字母
- 2.6 删除文件中的数字冒号和斜线和逗号
- 2.7 针对文件每一行进行压缩,即当存在连续重复的字母时只保留一个
一、tr命令使用方法
1.1 tr命令的作用
tr命令用于字符转换、替换和删除,主要用于删除文件中的控制符或进行字符串转换等。
1.2 tr命令格式
# 用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理commands | tr ‘string1’ ‘string2’# 用法2:对来自于filename文件中的内容进行字符替换。tr 'string1' 'string2' < filename# 用法3:对来自filename文件的内容查询string1并进行相应的处理,比如删除等。tr option 'string1' <filename
1.3 tr命令常用的选项
- -d: 删除字符串
- -s: 删除所有重复出现字符序列,只保留第一个,即将重复出现字符串压缩为一个字符串
1.4 常用的匹配字符串
字符串 | 含义 |
---|---|
a-z或[:lower:] | 匹配所有小写字母 |
A-Z或[:upper:] | 匹配所有大写字母 |
0-9或[:digit:] | 匹配所有的数字 |
[:alnum:] | 匹配所有字母和数字 |
[:alpha:] | 匹配所有字母 |
[:blank:] | 所有水平空白 |
[:punct:] | 匹配所有标点符号 |
[:space:] | 皮牌所有水平或垂直的空格 |
[:cntrl:] | 匹配所有控制字符 |
二、tr命令常用实例
2.1 如何查看文本中的控制字符
比如这里准备一个文件,demo1.conf,内容如下
namedomainipareauserpasswordrole
vi demo1.conf 编辑文件,然后执行如下命令即可查看文件中的控制字符了
:set list
如下图所示,可以看到每行最后都有一个$符号,这就是回车符
2.2 将所有小写字母转换为大写字母
首相这准备一个test.txt文件
cat /etc/passwd > test.txt
内容如下:
[root@jiayi-centos-01 opt]# cat test.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:998:User for polkitd:/:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinisrc-admin:x:1000:1000:isrc-admin:/home/isrc-admin:/bin/bashunbound:x:998:996:Unbound DNS resolver:/etc/unbound:/sbin/nologinrpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologinqemu:x:107:107:qemu user:/:/sbin/nologingluster:x:997:995:GlusterFS daemons:/run/gluster:/sbin/nologinradvd:x:75:75:radvd user:/:/sbin/nologinsaslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologintss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologinrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologinnfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologinhonghua:x:1001:1001::/home/honghua:/bin/bash[root@jiayi-centos-01 opt]#
执行下面命令即可将test.txt中小写替换为答谢,并写入demo.txt
[root@jiayi-centos-01 opt]# tr 'a-z' 'A-Z'<test.txt > demo.txt[root@jiayi-centos-01 opt]# cat demo.txtROOT:X:0:0:ROOT:/ROOT:/BIN/BASHBIN:X:1:1:BIN:/BIN:/SBIN/NOLOGINDAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGINADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGINLP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGINSYNC:X:5:0:SYNC:/SBIN:/BIN/SYNCSHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWNHALT:X:7:0:HALT:/SBIN:/SBIN/HALTMAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGINOPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGINGAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGINFTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGINNOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGINSYSTEMD-NETWORK:X:192:192:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGINDBUS:X:81:81:SYSTEM MESSAGE BUS:/:/SBIN/NOLOGINPOLKITD:X:999:998:USER FOR POLKITD:/:/SBIN/NOLOGINSSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGINPOSTFIX:X:89:89::/VAR/SPOOL/POSTFIX:/SBIN/NOLOGINISRC-ADMIN:X:1000:1000:ISRC-ADMIN:/HOME/ISRC-ADMIN:/BIN/BASHUNBOUND:X:998:996:UNBOUND DNS RESOLVER:/ETC/UNBOUND:/SBIN/NOLOGINRPC:X:32:32:RPCBIND DAEMON:/VAR/LIB/RPCBIND:/SBIN/NOLOGINQEMU:X:107:107:QEMU USER:/:/SBIN/NOLOGINGLUSTER:X:997:995:GLUSTERFS DAEMONS:/RUN/GLUSTER:/SBIN/NOLOGINRADVD:X:75:75:RADVD USER:/:/SBIN/NOLOGINSASLAUTH:X:996:76:SASLAUTHD USER:/RUN/SASLAUTHD:/SBIN/NOLOGINTSS:X:59:59:ACCOUNT USED BY THE TROUSERS PACKAGE TO SANDBOX THE TCSD DAEMON:/DEV/NULL:/SBIN/NOLOGINRPCUSER:X:29:29:RPC SERVICE USER:/VAR/LIB/NFS:/SBIN/NOLOGINNFSNOBODY:X:65534:65534:ANONYMOUS NFS USER:/VAR/LIB/NFS:/SBIN/NOLOGINHONGHUA:X:1001:1001::/HOME/HONGHUA:/BIN/BASH[root@jiayi-centos-01 opt]#
2.3 将文件中的数字替换为&符号
执行如下命令即可将test.txt中的所有数字转换为&符号并写入demo.txt
[root@jiayi-centos-01 opt]# tr '0-9' '&'<test.txt > demo.txt[root@jiayi-centos-01 opt]# cat demo.txtroot:x:&:&:root:/root:/bin/bashbin:x:&:&:bin:/bin:/sbin/nologindaemon:x:&:&:daemon:/sbin:/sbin/nologinadm:x:&:&:adm:/var/adm:/sbin/nologinlp:x:&:&:lp:/var/spool/lpd:/sbin/nologinsync:x:&:&:sync:/sbin:/bin/syncshutdown:x:&:&:shutdown:/sbin:/sbin/shutdownhalt:x:&:&:halt:/sbin:/sbin/haltmail:x:&:&&:mail:/var/spool/mail:/sbin/nologinoperator:x:&&:&:operator:/root:/sbin/nologingames:x:&&:&&&:games:/usr/games:/sbin/nologinftp:x:&&:&&:FTP User:/var/ftp:/sbin/nologinnobody:x:&&:&&:Nobody:/:/sbin/nologinsystemd-network:x:&&&:&&&:systemd Network Management:/:/sbin/nologindbus:x:&&:&&:System message bus:/:/sbin/nologinpolkitd:x:&&&:&&&:User for polkitd:/:/sbin/nologinsshd:x:&&:&&:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinpostfix:x:&&:&&::/var/spool/postfix:/sbin/nologinisrc-admin:x:&&&&:&&&&:isrc-admin:/home/isrc-admin:/bin/bashunbound:x:&&&:&&&:Unbound DNS resolver:/etc/unbound:/sbin/nologinrpc:x:&&:&&:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologinqemu:x:&&&:&&&:qemu user:/:/sbin/nologingluster:x:&&&:&&&:GlusterFS daemons:/run/gluster:/sbin/nologinradvd:x:&&:&&:radvd user:/:/sbin/nologinsaslauth:x:&&&:&&:Saslauthd user:/run/saslauthd:/sbin/nologintss:x:&&:&&:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologinrpcuser:x:&&:&&:RPC Service User:/var/lib/nfs:/sbin/nologinnfsnobody:x:&&&&&:&&&&&:Anonymous NFS User:/var/lib/nfs:/sbin/nologinhonghua:x:&&&&:&&&&::/home/honghua:/bin/bash[root@jiayi-centos-01 opt]#
2.4 对命令执行结果中的冒号替换为tab制表符
如下,需要使用管道符
[root@jiayi-centos-01 opt]# cat test.txt | tr ':' '/t'root x 0 0 root /root /bin/bashbin x 1 1 bin /bin /sbin/nologindaemon x 2 2 daemon /sbin /sbin/nologinadm x 3 4 adm /var/adm /sbin/nologinlp x 4 7 lp /var/spool/lpd /sbin/nologinsync x 5 0 sync /sbin /bin/syncshutdown x 6 0 shutdown /sbin /sbin/shutdownhalt x 7 0 halt /sbin /sbin/haltmail x 8 12 mail /var/spool/mail /sbin/nologinoperator x 11 0 operator /root /sbin/nologingames x 12 100 games /usr/games /sbin/nologinftp x 14 50 FTP User /var/ftp /sbin/nologinnobody x 99 99 Nobody / /sbin/nologinsystemd-network x 192 192 systemd Network Management / /sbin/nologindbus x 81 81 System message bus / /sbin/nologinpolkitd x 999 998 User for polkitd / /sbin/nologinsshd x 74 74 Privilege-separated SSH /var/empty/sshd /sbin/nologinpostfix x 89 89 /var/spool/postfix /sbin/nologinisrc-admin x 1000 1000 isrc-admin /home/isrc-admin /bin/bashunbound x 998 996 Unbound DNS resolver /etc/unbound /sbin/nologinrpc x 32 32 Rpcbind Daemon /var/lib/rpcbind /sbin/nologinqemu x 107 107 qemu user / /sbin/nologingluster x 997 995 GlusterFS daemons /run/gluster /sbin/nologinradvd x 75 75 radvd user / /sbin/nologinsaslauth x 996 76 Saslauthd user /run/saslauthd /sbin/nologintss x 59 59 Account used by the trousers package to sandbox the tcsd daemon /dev/null /sbin/nologinrpcuser x 29 29 RPC Service User /var/lib/nfs /sbin/nologinnfsnobody x 65534 65534 Anonymous NFS User /var/lib/nfs /sbin/nologinhonghua x 1001 1001 /home/honghua /bin/bash[root@jiayi-centos-01 opt]#
2.5 删除文件中的所有小写字母
如下所示,删除小写字母后,每一行还是每一行,只是将小写字母全部删除
[root@jiayi-centos-01 opt]# tr -d 'a-z'<test.txt::0:0::/://::1:1::/://::2:2::/://::3:4:://://::4:7::///://::5:0::/://::6:0::/://::7:0::/://::8:12::///://::11:0::/://::12:100:://://::14:50:FTP U://://::99:99:N:/://-::192:192: N M:/://::81:81:S :/://::999:998:U :/://::74:74:P- SSH:///://::89:89::///://-::1000:1000:-://-://::998:996:U DNS ://://::32:32:R D:///://::107:107: :/://::997:995:GFS ://://::75:75: :/://::996:76:S ://://::59:59:A ://://::29:29:RPC S U:///://::65534:65534:A NFS U:///://::1001:1001:://://[root@jiayi-centos-01 opt]#
2.6 删除文件中的数字冒号和斜线和逗号
如果对应多种匹配可以直接叠加即可
[root@jiayi-centos-01 opt]# tr -d ':/0-9,'<test.txtrootxrootrootbinbashbinxbinbinsbinnologindaemonxdaemonsbinsbinnologinadmxadmvaradmsbinnologinlpxlpvarspoollpdsbinnologinsyncxsyncsbinbinsyncshutdownxshutdownsbinsbinshutdownhaltxhaltsbinsbinhaltmailxmailvarspoolmailsbinnologinoperatorxoperatorrootsbinnologingamesxgamesusrgamessbinnologinftpxFTP UservarftpsbinnologinnobodyxNobodysbinnologinsystemd-networkxsystemd Network ManagementsbinnologindbusxSystem message bussbinnologinpolkitdxUser for polkitdsbinnologinsshdxPrivilege-separated SSHvaremptysshdsbinnologinpostfixxvarspoolpostfixsbinnologinisrc-adminxisrc-adminhomeisrc-adminbinbashunboundxUnbound DNS resolveretcunboundsbinnologinrpcxRpcbind Daemonvarlibrpcbindsbinnologinqemuxqemu usersbinnologinglusterxGlusterFS daemonsrunglustersbinnologinradvdxradvd usersbinnologinsaslauthxSaslauthd userrunsaslauthdsbinnologintssxAccount used by the trousers package to sandbox the tcsd daemondevnullsbinnologinrpcuserxRPC Service UservarlibnfssbinnologinnfsnobodyxAnonymous NFS Uservarlibnfssbinnologinhonghuaxhomehonghuabinbash[root@jiayi-centos-01 opt]#
2.7 针对文件每一行进行压缩,即当存在连续重复的字母时只保留一个
准备文件内容test.txt内容如下
aaaaaaabbbbbbbbbbbbbbbbbccccccccabcabcabc
通过-s参数即可实现压缩,如下所示,第二行内容因为不是连续重复,因此不会压缩
[root@jiayi-centos-01 opt]# tr -s 'a-z'<test.txtabcabcabcabc[root@jiayi-centos-01 opt]#