【原文链接】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,内容如下
name
domain
ip
area
user
password
role
vi demo1.conf 编辑文件,然后执行如下命令即可查看文件中的控制字符了
:set list
如下图所示,可以看到每行最后都有一个$符号,这就是回车符
2.2 将所有小写字母转换为大写字母
首相这准备一个test.txt文件
cat /etc/passwd > test.txt
内容如下:
[root@jiayi-centos-01 opt]# cat test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
isrc-admin:x:1000:1000:isrc-admin:/home/isrc-admin:/bin/bash
unbound:x:998:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
gluster:x:997:995:GlusterFS daemons:/run/gluster:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
honghua: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.txt
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
HALT:X:7:0:HALT:/SBIN:/SBIN/HALT
MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN
FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN
SYSTEMD-NETWORK:X:192:192:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
DBUS:X:81:81:SYSTEM MESSAGE BUS:/:/SBIN/NOLOGIN
POLKITD:X:999:998:USER FOR POLKITD:/:/SBIN/NOLOGIN
SSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGIN
POSTFIX:X:89:89::/VAR/SPOOL/POSTFIX:/SBIN/NOLOGIN
ISRC-ADMIN:X:1000:1000:ISRC-ADMIN:/HOME/ISRC-ADMIN:/BIN/BASH
UNBOUND:X:998:996:UNBOUND DNS RESOLVER:/ETC/UNBOUND:/SBIN/NOLOGIN
RPC:X:32:32:RPCBIND DAEMON:/VAR/LIB/RPCBIND:/SBIN/NOLOGIN
QEMU:X:107:107:QEMU USER:/:/SBIN/NOLOGIN
GLUSTER:X:997:995:GLUSTERFS DAEMONS:/RUN/GLUSTER:/SBIN/NOLOGIN
RADVD:X:75:75:RADVD USER:/:/SBIN/NOLOGIN
SASLAUTH:X:996:76:SASLAUTHD USER:/RUN/SASLAUTHD:/SBIN/NOLOGIN
TSS:X:59:59:ACCOUNT USED BY THE TROUSERS PACKAGE TO SANDBOX THE TCSD DAEMON:/DEV/NULL:/SBIN/NOLOGIN
RPCUSER:X:29:29:RPC SERVICE USER:/VAR/LIB/NFS:/SBIN/NOLOGIN
NFSNOBODY:X:65534:65534:ANONYMOUS NFS USER:/VAR/LIB/NFS:/SBIN/NOLOGIN
HONGHUA: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.txt
root:x:&:&:root:/root:/bin/bash
bin:x:&:&:bin:/bin:/sbin/nologin
daemon:x:&:&:daemon:/sbin:/sbin/nologin
adm:x:&:&:adm:/var/adm:/sbin/nologin
lp:x:&:&:lp:/var/spool/lpd:/sbin/nologin
sync:x:&:&:sync:/sbin:/bin/sync
shutdown:x:&:&:shutdown:/sbin:/sbin/shutdown
halt:x:&:&:halt:/sbin:/sbin/halt
mail:x:&:&&:mail:/var/spool/mail:/sbin/nologin
operator:x:&&:&:operator:/root:/sbin/nologin
games:x:&&:&&&:games:/usr/games:/sbin/nologin
ftp:x:&&:&&:FTP User:/var/ftp:/sbin/nologin
nobody:x:&&:&&:Nobody:/:/sbin/nologin
systemd-network:x:&&&:&&&:systemd Network Management:/:/sbin/nologin
dbus:x:&&:&&:System message bus:/:/sbin/nologin
polkitd:x:&&&:&&&:User for polkitd:/:/sbin/nologin
sshd:x:&&:&&:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:&&:&&::/var/spool/postfix:/sbin/nologin
isrc-admin:x:&&&&:&&&&:isrc-admin:/home/isrc-admin:/bin/bash
unbound:x:&&&:&&&:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:&&:&&:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
qemu:x:&&&:&&&:qemu user:/:/sbin/nologin
gluster:x:&&&:&&&:GlusterFS daemons:/run/gluster:/sbin/nologin
radvd:x:&&:&&:radvd user:/:/sbin/nologin
saslauth:x:&&&:&&:Saslauthd user:/run/saslauthd:/sbin/nologin
tss:x:&&:&&:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpcuser:x:&&:&&:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:&&&&&:&&&&&:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
honghua: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/bash
bin x 1 1 bin /bin /sbin/nologin
daemon x 2 2 daemon /sbin /sbin/nologin
adm x 3 4 adm /var/adm /sbin/nologin
lp x 4 7 lp /var/spool/lpd /sbin/nologin
sync x 5 0 sync /sbin /bin/sync
shutdown x 6 0 shutdown /sbin /sbin/shutdown
halt x 7 0 halt /sbin /sbin/halt
mail x 8 12 mail /var/spool/mail /sbin/nologin
operator x 11 0 operator /root /sbin/nologin
games x 12 100 games /usr/games /sbin/nologin
ftp x 14 50 FTP User /var/ftp /sbin/nologin
nobody x 99 99 Nobody / /sbin/nologin
systemd-network x 192 192 systemd Network Management / /sbin/nologin
dbus x 81 81 System message bus / /sbin/nologin
polkitd x 999 998 User for polkitd / /sbin/nologin
sshd x 74 74 Privilege-separated SSH /var/empty/sshd /sbin/nologin
postfix x 89 89 /var/spool/postfix /sbin/nologin
isrc-admin x 1000 1000 isrc-admin /home/isrc-admin /bin/bash
unbound x 998 996 Unbound DNS resolver /etc/unbound /sbin/nologin
rpc x 32 32 Rpcbind Daemon /var/lib/rpcbind /sbin/nologin
qemu x 107 107 qemu user / /sbin/nologin
gluster x 997 995 GlusterFS daemons /run/gluster /sbin/nologin
radvd x 75 75 radvd user / /sbin/nologin
saslauth x 996 76 Saslauthd user /run/saslauthd /sbin/nologin
tss x 59 59 Account used by the trousers package to sandbox the tcsd daemon /dev/null /sbin/nologin
rpcuser x 29 29 RPC Service User /var/lib/nfs /sbin/nologin
nfsnobody x 65534 65534 Anonymous NFS User /var/lib/nfs /sbin/nologin
honghua 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.txt
rootxrootrootbinbash
binxbinbinsbinnologin
daemonxdaemonsbinsbinnologin
admxadmvaradmsbinnologin
lpxlpvarspoollpdsbinnologin
syncxsyncsbinbinsync
shutdownxshutdownsbinsbinshutdown
haltxhaltsbinsbinhalt
mailxmailvarspoolmailsbinnologin
operatorxoperatorrootsbinnologin
gamesxgamesusrgamessbinnologin
ftpxFTP Uservarftpsbinnologin
nobodyxNobodysbinnologin
systemd-networkxsystemd Network Managementsbinnologin
dbusxSystem message bussbinnologin
polkitdxUser for polkitdsbinnologin
sshdxPrivilege-separated SSHvaremptysshdsbinnologin
postfixxvarspoolpostfixsbinnologin
isrc-adminxisrc-adminhomeisrc-adminbinbash
unboundxUnbound DNS resolveretcunboundsbinnologin
rpcxRpcbind Daemonvarlibrpcbindsbinnologin
qemuxqemu usersbinnologin
glusterxGlusterFS daemonsrunglustersbinnologin
radvdxradvd usersbinnologin
saslauthxSaslauthd userrunsaslauthdsbinnologin
tssxAccount used by the trousers package to sandbox the tcsd daemondevnullsbinnologin
rpcuserxRPC Service Uservarlibnfssbinnologin
nfsnobodyxAnonymous NFS Uservarlibnfssbinnologin
honghuaxhomehonghuabinbash
[root@jiayi-centos-01 opt]#
2.7 针对文件每一行进行压缩,即当存在连续重复的字母时只保留一个
准备文件内容test.txt内容如下
aaaaaaabbbbbbbbbbbbbbbbbcccccccc
abcabcabc
通过-s参数即可实现压缩,如下所示,第二行内容因为不是连续重复,因此不会压缩
[root@jiayi-centos-01 opt]# tr -s 'a-z'<test.txt
abc
abcabcabc
[root@jiayi-centos-01 opt]#