Linux Shell 018-文本字符转换工具tr

Linux Shell 018-文本字符转换工具tr

本节关键字:Linux、Bash Shell、文本字符转换
相关指令:tr

tr介绍

tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换。

tr语法

# 用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
$ commands | tr  'string1'  'string2'

# 用法2:tr处理的内容来自文件,记住要使用"<"标准输入
$ tr  'string1'  'string2' < filename

# 用法3:匹配string1进行相应操作,如删除操作
$ tr [options] 'string1' < filename

tr常用选项

选项 说明
-c 反选设定字符,符合的部分不处理,不符合的部分才进行转换
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
–help 显示帮助
–version 显示版本信息

常见匹配字符串

命令 说明
a-z或[:lower:] 匹配所有小写字母
[a-zA-Z0-9] 所有大小写和数字
A-Z或[:upper:] 匹配所有大写字母
0-9或[:digit:] 匹配所有数字
[:alnum:] 匹配所有字母和数字
[:alpha:] 匹配所有字母
[:blank:] 所有水平空白
[:punct:] 匹配所有标点符号
[:space:] 所有水平或垂直的空格
[:cntrl:] 所有控制字符
\ 反斜杠
\a Ctrl-G 铃声
\b Ctrl-H 退格符
\f Ctrl-L 走行换页
\n Ctrl-J 换行
\r Ctrl-M 回车
\t Ctrl-I tab键

tr实例

$ cat 3.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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
boss02:x:516:511::/home/boss02:/bin/bash
vip:x:517:517::/home/vip:/bin/bash
stu1:x:518:518::/home/stu1:/bin/bash
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
aaaaaaaaaaaaaaaaaaaa
bbbbbb111111122222222222233333333cccccccc
hello world 888
666
777
999

# 删除文件中的:和/
$ tr -d '[:/]' < 3.txt

# 删除文件中的:和/    
$ cat 3.txt |tr -d '[:/]'
            
# 将文件中的数字替换为@符号
$ tr '[0-9]' '@' < 3.txt

# 将文件中的小写字母替换成大写字母
$ tr '[a-z]' '[A-Z]' < 3.txt

# 匹配小写字母并将重复的压缩为一个
$ tr -s '[a-z]' < 3.txt

# 匹配小写字母和数字并将重复的压缩为一个
$ tr -s '[a-z0-9]' < 3.txt

# 删除文件中的数字
$ tr -d '[:digit:]' < 3.txt

# 删除水平空白
$ tr -d '[:blank:]' < 3.txt

# 删除所有水平和垂直空白
$ tr -d '[:space:]' < 3.txt

# 分别截取当前主机IP;截取NETMASK;截取广播地址;截取MAC地址
$ ifconfig eth0 | grep 'Bcast' | tr -d '[a-zA-Z ]' | cut -d: -f2,3,4
10.1.1.1:10.1.1.255:255.255.255.0
$ ifconfig eth0 | grep 'Bcast' | tr -d '[a-zA-Z ]' | cut -d: -f2,3,4 | tr ':' '\n'
10.1.1.1
10.1.1.255
255.255.255.0
$ ifconfig eth0 | grep 'HWaddr' | cut -d: -f2- | cut -d' ' -f4
00:0C:29:25:AE:54
$ ifconfig eth0 | grep 'HW' | tr -s ' ' | cut -d' ' -f5
00:0C:29:B4:9E:4E

$ ifconfig eth1 | grep Bcast | cut -d: -f2 | cut -d' ' -f1
$ ifconfig eth1|grep Bcast|cut -d: -f2|tr -d '[ a-zA-Z]'
$ ifconfig eth1|grep Bcast|tr -d '[:a-zA-Z]'|tr ' ' '@'|tr -s '@'|tr '@' '\n'|grep -v ^$
$ ifconfig eth0|grep 'Bcast'|tr -d [:alpha:]|tr '[ :]' '\n'|grep -v ^$
$ ifconfig eth1|grep HWaddr|cut -d ' ' -f11
$ ifconfig eth0|grep HWaddr|tr -s ' '|cut -d' ' -f5
$ ifconfig eth1|grep HWaddr|tr -s ' '|cut -d' ' -f5
$ ifconfig eth0|grep 'Bcast'|tr -d 'a-zA-Z:'|tr ' ' '\n'|grep -v '^$'

# 将系统中所有普通用户的用户名、密码和默认shell保存到一个文件中,要求用户名密码和默认shell之间用tab键分割
$ grep 'bash$' passwd | grep -v 'root'| cut -d: -f1,2,7 | tr ':' '\t' | tee abc.txt

你可能感兴趣的:(Linux,Shell脚本,linux,chrome,运维,bash,centos)