一、正则表达式grep
- -a 不要忽略二进制数据。
- -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
- -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
- -c 计算符合范本样式的列数。
- -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
- -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。-e<范本样式> 指定字符串作为查找文件内容的范本样式。
- -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
- -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
- -F 将范本样式视为固定字符串的列表。
- -G 将范本样式视为普通的表示法来使用。
- -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
- -H 在显示符合范本样式的那一列之前,标示该列的文件名称。
- -i 忽略字符大小写的差别。
- -l 列出文件内容符合指定的范本样式的文件名称。
- -L 列出文件内容不符合指定的范本样式的文件名称。
- -n 在显示符合范本样式的那一列之前,标示出该列的编号。
- -q 不显示任何信息。
- -R/-r 此参数的效果和指定“-d recurse”参数相同。
- -s 不显示错误信息。
- -v 反转查找。
- -w只显示全字符合的列。
- -x 只显示全列符合的列。
- -y 此参数效果跟“-i”相同。
- -o 只输出文件中匹配到的部分。
1.基础正则表达式
基础正则表达式是常用正则表达式最基础的部分。在Linux 系统中常见的文件处理工具中grep 与sed 支持基础正则表达式,而egrep 与awk 支持扩展正则表达式。
(1)创建测试文件
[root@localhost ~]#cat test.txt
he was short and fat.
he was weating a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
PI=3.14
a wood cross!
Actions speak louder than words
#woood #
#woooooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.
(2)查找特定字符
1)查看包含the的行
[root@localhost ~]# grep -ni 'the' test.txt
3:The home of Football on BBC Sport online.
4:the tongue is boneless but it breaks bones.12!
5:google is the best tools for search keyword.
注释:
- -n:显示行号
- -i:不区分大小写
- -v:不包含指定字符
2)利用[ ]查找集合字符
[root@localhost ~]# grep -n 'sh[io]rt' test.txt
1:he was short and fat.
2:he was weating a blue polo shirt with black pants.
注释:
- [ ]:中括号内不管写几个字符,都只匹配一个,表示匹配其中的任何一个字符
3)查找字母oo前不是字母w的内容
[root@localhost ~]#grep -n '[^w]oo' test.txt
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
9:#woood #
10:#woooooooood #
12:I bet this place is really spooky late at night!
4)查看字母oo前不是小写字母的内容
[root@localhost ~]# grep -n '[^a-z]oo' test.txt
3:The home of Football on BBC Sport online.
注释:
- 字母前直接用^,表示取反
- [ ]前用^,表示以括号中的字符开头
(3)查找行首与行尾
1)查看以the为行首的行
[root@localhost ~]# grep -n '^the' test.txt
4:the tongue is boneless but it breaks bones.12!
2)查询以小写字母开头的行
[root@localhost ~]# grep -n '^[a-z]' test.txt
1:he was short and fat.
2:he was weating a blue polo shirt with black pants.
4:the tongue is boneless but it breaks bones.12!
5:google is the best tools for search keyword.
7:a wood cross!
3)查询以大写字母开头的行
[root@localhost ~]#grep -n '^[A-Z]' test.txt
3:The home of Football on BBC Sport online.
6:PI=3.14
8:Actions speak louder than words
11:AxyzxyzxyzxyzC
12:I bet this place is really spooky late at night!
13:Misfortunes never come alone/single.
14:I shouldn't have lett so tast.
4)查看以非字母开头的行
[root@localhost ~]# grep -n '^[^a-zA-Z]' test.txt
9:#woood #
10:#woooooooood #
5)查看以点结尾的行
[root@localhost ~]# grep -n '\.$' test.txt
1:he was short and fat.
2:he was weating a blue polo shirt with black pants.
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
13:Misfortunes never come alone/single.
14:I shouldn't have lett so tast.
6)查询空行
[root@localhost ~]# grep -n '^$' test.txt
7)查询非空行
[root@localhost ~]# grep -n -v '^$' test.txt
(4)查找任意字符和重复字符
1)查找包含四字符的单词的行,单词以w开头,以d结尾
[root@localhost ~]#grep -n 'w..d' test.txt
5:google is the best tools for search keyword.
7:a wood cross!
8:Actions speak louder than words
注释:
一个点代表一个字符
2)查询至少包含两个字母o(oo)字符串的行
[root@localhost ~]# grep -n 'ooo*' test.txt
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
7:a wood cross!
10:#woood #
11:#woooooooood #
13:I bet this place is really spooky late at night!
注释:
ooo*:前两个o是条件,表示包含两个o;然后是o*,表示后面有零个或多个重复o
3)查找行,行中单词包含w开头和d结尾,中间至少一个字母o
[root@localhost ~]# grep -n 'woo*d' test.txt
7:a wood cross!
10:#woood #
11:#woooooooood #
4)查询以w开头,d结尾,中间字符可有可无
[root@localhost ~]# grep -n 'w.*d' test.txt
1:he was short and fat.
5:google is the best tools for search keyword.
7:a wood cross!
8:Actions speak louder than words
10:#woood #
11:#woooooooood #
5)查询包含数字的行
[root@localhost ~]# grep -n '[0-9][0-9]*' test.txt
4:the tongue is boneless but it breaks bones.12!
6:PI=3.14
(5)查找连续字符范围
1)查询包含两个o的字符
[root@localhost ~]# grep -n 'o\{2\}' test.txt
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
7:a wood cross!
10:#woood #
11:#woooooooood #
13:I bet this place is really spooky late at night!
注释:
'o\{2\}':表示两个字母o
2)w开头,d结尾中间有2--5个o
[root@localhost ~]# grep -n 'wo\{2,5\}d' test.txt
7:a wood cross!
10:#woood #
3)w开头,d结尾中间有2个以上o
[root@localhost ~]# grep -n 'wo\{2,\}d' test.txt
7:a wood cross!
10:#woood #
11:#woooooooood #
2.基础正则表达式常见元字符
- ^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配“^” 字符本身,请使用“\^”
- $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则“$”也匹配‘\n’或‘\r’。 要匹配“$”字符本身,请使用“\$”
- . 匹配除“\r\n”之外的任何单个字符
- \ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义
- * 匹配前面的子表达式零次或多次。要匹配“*”字符,请使用“\*”
- [] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”
- [^] 赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]”可以匹配“plain”中任何一个字母
- [n1-n2] 字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意一个 小写字母字符。
注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示字符的范围;如 果出现在字符组的开头,则只能表示连字符本身
- {n} n 是一个非负整数,匹配确定的 n 次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中 的“oo”
- {n,} n 是一个非负整数,至少匹配 n 次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中 的所有 o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”
- {n,m} m 和 n 均为非负整数,其中 n<=m,最少匹配 n 次且最多匹配 m 次
3.扩展正则表达式
[root@localhost ~]#grep -v '^$' /etc/ssh/sshd_config | grep -v '^#'
用扩展正则表达式表示:
[root@localhost ~]# egrep -v '^$|^#' /etc/ssh/sshd_config
4.扩展正则表达式常见元字符
- +
作用:重复一个或者一个以上的前一个字符
示例:执行“egrep -n 'wo+d' test.txt”命令,即可查询"wood" "woood" "woooooood"等字符串
- ?
作用:零个或者一个的前一个字符
示例:执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet”“best”这两个字符串
- |
作用:使用或者(or)的方式找出多个字符
示例:执行“egrep -n 'of|is|on' test.txt”命令即可查询"of"或者"if"或者"on"字符串
- ()
作用:查找“组”字符串
示例:“egrep -n 't(a|e)st' test.txt”。“tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e” 列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串
- ()+
作用:辨别多个重复的组
示例:“egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字 符串的意思
二、文本处理器——sed
sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell 脚本中,用以完成各种自动化处理任务。
sed 的工作流程主要包括读取、执行和显示三个过程。
- 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
- 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令将会在所有的行上依次执行。
- 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
1.sed常用选项
- -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
- -e :直接在命令列模式上进行 sed 的动作编辑。
- -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作。
- -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
- -i :直接修改读取的文件内容,而不是输出到终端。
2.sed常用操作
- a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
- c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
- d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
- i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
- s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行
- y :字符转换
3.输出符合条件的文本
(1)输出所有内容
[root@localhost ~]# sed -n 'p' test.txt
(2)输出第三行
[root@localhost ~]# sed -n '3p' test.txt
(3)输出3~5行
[root@localhost ~]# sed -n '3,5p' test.txt
(4)输出所有奇数行
[root@localhost ~]#sed -n 'p;n' test.txt
(5)输出所有偶数行
[root@localhost ~]# sed -n 'n;p' test.txt
(6)输出第1~5行之间的奇数行
[root@localhost ~]# sed -n '1,5{p;n}' test.txt
(7)输出第10行至文件尾之间的偶数行
[root@localhost ~]# sed -n '10,${n;p}' test.txt
注释:
此命令中,读取的第一行是文件的第10行,读取的第二行,是文件的第11行,依次类推
(8)输出包含the的行
[root@localhost ~]# sed -n '/the/p' test.txt
(9)输出从第4行开始至第一个包含the的行
[root@localhost ~]#sed -n ' 4,/the/p' test.txt
(10)输出包含the的行所在的行号
[root@localhost ~]# sed -n '/the/=' test.txt
注释:
=用来输出行号
(11)输出以PI开头的行
[root@localhost ~]#sed -n '/^PI/p' test.txt
(12)输出包含单词wood的行
[root@localhost ~]# sed -n '/\<wood\>/p' test.txt
4.删除符合条件的文本
(1)删除第3行
[root@localhost ~]# nl test.txt | sed '3d' ##显示行号
或
[root@localhost ~]# sed '3d' test.txt ##不显示行号
(2)删除3~5行
[root@localhost ~]# nl test.txt |sed '3,5d'
(3)删除包含cross的行
[root@localhost ~]# nl test.txt |sed '/cross/d'
(4)删除不包含cross的行
[root@localhost ~]# nl test.txt |sed '/cross/! d'
(5)删除以小写字母开头的行
[root@localhost ~]# sed '/^[a-z]/d' test.txt
(6)删除以点结尾的行
[root@localhost ~]# sed '/\.$/d' test.txt
(7)删除空行
[root@localhost ~]#sed '/^$/d' test.txt
5.替换符合条件的文本
(1)将每行的第一个the换成THE
[root@localhost ~]#sed 's/the/THE/' test.txt
(2)将每行中的第2个l换成L
[root@localhost ~]# sed 's/l/L/2' test.txt
(3)将文中所有的the换成THE
[root@localhost ~]# sed 's/the/THE/g' test.txt
(4)将文中所有的o删除
[root@localhost ~]# sed 's/o//g' test.txt
(5)在每行的行首插入#
[root@localhost ~]# sed 's/^/#/' test.txt
(6)在每行行尾添加#
[root@localhost ~]# sed 's/$/#/' test.txt
(7)在包含the的每行的行首插入#
[root@localhost ~]# sed '/the/s/^/#/' test.txt
(8)在每行的行尾插入字符串EOF
[root@localhost ~]# sed 's/$/EOF/' test.txt
(9)将第3~5行中的所有the替换成THE
[root@localhost ~]# sed '3,5s/the/THE/g' test.txt
(10)将包含the的所有行中的o都替换成O
[root@localhost ~]#sed '/the/s/o/O/g' test.txt
6.迁移符合条件的文本
- H:复制到剪切板
- g:将剪切板中的内容覆盖到指定行
- G:将剪切板中的内容追加到指定行
- w:保存文件
- r:读取指定文件
- a:追加指定内容
(1)将包含the的行迁移至文件的末尾
[root@localhost ~]# sed '/the/{H;d};$G' test.txt
(2)将第1~5行的内容转移至第17行后
[root@localhost ~]#sed '1,5{H;d};17G' test.txt
(3)将包含the的行另存为文件out.txt
[root@localhost ~]# sed '/the/w out.txt' test.txt
(4)将文件/etc/hostname的内容添加到包含the的每一行后
[root@localhost ~]# sed '/the/r /etc/hostname' test.txt
(5)在第3行后插入一个新行,内容为#chkconfig:35 82 20
[root@localhost ~]#sed '3a#chkconfig:35 82 20' test.txt
(6)在包含the的每行后插入一个新行,内容为New
[root@localhost ~]# sed '/the/aNew' test.txt
(7)在第3行后插入多行内容
[root@localhost ~]# sed '3aNew1\nNew2' test.txt
注释:\n为换行,添加两行为New1和New2
7.使用脚本编辑文件
使用 sed 脚本将多个编辑指令存放到文件中(每行一条编辑指令),通过“-f”选项来调用。
sed '1,5{H;d};17G' test.txt //将第 1~5 行内容转移至第 17 行后
以上操作可以改用脚本文件方式:
[root@localhost ~]# vi opt.list
1,5H
1,5d
17G
[root@localhost ~]# sed -f opt.list test.txt
8.sed 直接操作文件
编写一个脚本,用来调整 vsftpd 服务配置,要求禁止匿名用户,但允许本地用户(也允许写入)。
[root@localhost ~]# vim local_only_ftp.sh
#!/bin/bash
# 指定样本文件路径、配置文件路径
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf "
CONFIG="/etc/vsftpd/vsftpd.conf"
# 备份原来的配置文件,检测文件名为/etc/vsftpd/vsftpd.conf.bak 备份文件是否存在,
若不存在则使用 cp 命令进行文件备份
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak
# 基于样本配置进行调整,覆盖现有文件
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
# 启动 vsftpd 服务,并设为开机后自动运行
systemctl restart vsftpd
systemctl enable vsftpd
三、文本处理器——awk
awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理
1.awk常见用法
- $0 表示整个当前行
- $1 每行第一个字段
- NF 字段数量变量
- NR 每行的记录号,多文件记录递增
- FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
- \t 制表符
- \n 换行符
- FS BEGIN时定义分隔符
- RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
- ~ 匹配,与==相比不是精确比较
- !~ 不匹配,不精确比较
- == 等于,必须全部相等,精确比较
- != 不等于,精确比较
- && 逻辑与
- || 逻辑或
- + 匹配时表示1个或1个以上
- /[0-9][0-9]+/ 两个或两个以上数字
- /[0-9][0-9]*/ 一个或一个以上数字
- FILENAME 文件名
- OFS 输出字段分隔符, 默认也是空格,可以改为制表符等
- ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
- -F'[:#/]' 定义三个分隔符
2.按行输出文本
awk -F":" '{print}' /etc/passwd //输出所有
awk -F":" '{print$0}' /etc/passwd //输出所有
awk -F: 'NR==3,NR==6{print}' /etc/passwd //显示第3行到第6行
awk -F: 'NR>=3&&NR<=6{print}' /etc/passwd 显示第3行到第6行
awk -F: 'NR==3||NR==6{print}' /etc/passwd 显示第3行和第6行
awk '(NR%2)==1{print}' /etc/passwd //显示奇数行
awk '(NR%2)==0{print}' /etc/passwd //显示偶数行
awk '/^root/{print}' /etc/passwd //显示以root开头的行
awk '/nologin$/{print}' /etc/passwd //显示以nologin结尾的行
awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd //统计以/bin/bash结尾的行数
awk 'BEGIN{RS=""};END{print NR}' /etc/ssh/sshd_config //统计以空行分隔的文本段落数
awk '{print NR,$0}' /etc/passwd //输出每行的行号
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR==5{print}' /etc/passwd //显示第5行
route -n|awk 'NR!=1{print}' //不显示第一行
awk -F: '{print NF}' /etc/passwd //显示每行有多少字段
awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来
显示只有4个字段的行
awk -F: 'NF>2{print $0}' /etc/passwd //显示每行字段数量大于2的行
3.按字段输出文本
awk -F":" '{print $3}' /etc/passwd //显示第三列
awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,无空格,
awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,输出第1和第3个字段,有空格
awk -F: '$2=="!!" {print}' /etc/shadow //统计密码为空的shadow记录
awk 'BEGIN {FS=":"}; $2=="!!" {print}' /etc/shadow ##显示密码为空的用户的shadow信息
awk -F ":" '$7~"/bash" {print $1}' /etc/passwd ##显示第七个字段为/bash的行的第一个字段
awk -F: 'NR==5{print}' /etc/passwd显示第5行
awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间手动添加空格分隔
4.通过管道、双引号调用shell命令
awk -F: '/bash$/{print | "wc -l"}' /etc/passwd ##统计bash用户的个数
awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}}'##统计在线用户的数量
awk 'BEGIN {"hostname" | getline;print $0}' ##输出当前主机名
awk -F: '$1~/mail/ && $3>6逻辑与,$1匹配mail,并且$3>6
awk -F: '{if($1~/mail/ && $3>8) print }' /etc/passwd
awk -F: '$1~/mail/ || $3>1000 {print }' /etc/passwd //逻辑或,统计以mail开头或第3列大于1000的行
awk -F: '{if($1~/mail/ || $3>1000) print }' /etc/passwd
四、sort 工具
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。sort 命令的语法为“sort [选项] 参数”,其中常用的选项包括以下几种。
- -f:忽略大小写;
- -b:忽略每行前面的空格;
- -M:按照月份进行排序;
- -n:按照数字进行排序;
- -r:反向排序;
- -u:等同于uniq,表示相同的数据仅显示一行;
- -t:指定分隔符,默认使用[Tab]键分隔;
- -o <输出文件>:将排序后的结果转存至指定文件;
- -k:指定排序区域。
1.将/etc/passwd 文件中的账号进行排序
[root@localhost ~]# sort /etc/passwd
2.将/etc/passwd 文件中第三列进行反向排序
[root@localhost ~]# sort -t ':' -rk 3 /etc/passwd
备注:
- -r:反向排序;
- -t:指定分隔符,默认使用[Tab]键分隔;
- -k:指定排序区域。
3.将/etc/passwd 文件中第三列进行排序,并将输出内容保存至user.txt 文件中
[root@localhost ~]# sort -t ':' -k 3 /etc/passwd -o user.txt
[root@localhost ~]# cat user.txt
备注:
- -t:指定分隔符,默认使用[Tab]键分隔;
- -k:指定排序区域。
五、uniq 工具
Uniq 工具在Linux 系统中通常与sort 命令结合使用,用于报告或者忽略文件中的重复行。具体的命令语法格式为:uniq [选项] 参数。其中常用选项包括以下几种:
- -c:进行计数;
- -d:仅显示重复行;
- -u:仅显示出现一次的行。
1.删除testfile 文件中的重复行
[root@localhost ~]# cat testfile
Linux 10
Linux 20
Linux 30
Linux 30
Linux 30
CentOS 6.5
CentOS 6.5
CentOS 6.5
CentOS 7.3
CentOS 7.3
CentOS 7.3
[root@localhost ~]# uniq testfile
Linux 10
Linux 20
Linux 30
CentOS 6.5
CentOS 7.3
2.删除testfile 文件中的重复行,并在行首显示该行重复出现的次数
[root@localhost ~]# uniq -c testfile
1 Linux 10
1 Linux 20
3 Linux 30
3 CentOS 6.5
3 CentOS 7.3
备注:
- -c:进行计数
3.查找testfile 文件中的重复行
[root@localhost ~]# uniq -d testfile
Linux 30
CentOS 6.5
CentOS 7.3
备注:
- -d:仅显示重复行
六、tr 工具
tr 命令常用来对来自标准输入的字符进行替换、压缩和删除。可以将一组字符替换之后变成另一组字符,经常用来编写优美的单行命令,作用很强大。
其常用选项包括以下内容。
- -c:取代所有不属于第一字符集的字符;
- -d:删除所有属于第一字符集的字符;
- -s:把连续重复的字符以单独一个字符表示;
- -t:先删除第一字符集较第二字符集多出的字符。
1.将输入字符由大写转换为小写
[root@localhost ~]# echo "KGC" | tr 'A-Z' 'a-z'
kgc
2.压缩输入中重复的字符
[root@localhost ~]# echo "thissss is a text linnnnnnne." | tr -s 'sn'
this is a text line.
备注:
- -s:把连续重复的字符以单独一个字符表示
3.删除字符串中某些字符
[root@localhost ~]# echo 'hello world' | tr -d 'od'
hell wrl
备注:
- -d:删除所有属于第一字符集的字符