一 1)、正则表达式(RegularExpression,RE)

1:正则表达式的概念定义和用途
  • 正则表达式又称正规表达式、常规表达式,正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串
  • 正则表达式是由普通字符与元字符组成的文字模式,用于描述在搜索文本时要匹配的一个或多个字符串,正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。其中普通字符包括大小写字母、数字、标点符号及一些其他符号,元字符则是指那些在正则表达式中具有特殊意义的专用字符
  • 正则表达式一般用于脚本编程与文本编辑器中,例如Linux 系统中常见的文本处理器(grep、egrep、sed、awk)以及应用比较广泛的 Python 语言
    • grep:查询搜索过滤;sed:查询搜索过滤修改;awk:
    • 目前常用的邮件服务器postfix 以及支持邮件服务器的相关分析软件都支持正则表达式的对比功能,将来信的标题、内容与特殊字符串进行对比,发现问题邮件就过滤掉
2:基础正则表达式

在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep与 awk 支持扩展正则表达式

//需要提前准备一个test.txt测试文件
[root@localhost ~]# cat test.txt

he was short and fat.
He was wearing 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.
The year ahead will test our political establishment to the limit.
P=3.141592653589793238462643383249901429
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.
(1)查找特定字符串
//从 test.txt 文件中查找出特定字符“the”所在位置
[root@localhost ~]# grep -n 'the' test.txt
4:the tongue is boneless but it breaks bones.12!
5:google is the best tools for search keyword
6:The year ahead will test our political establishment to the limit.
[root@localhost ~]# grep -in '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.
6:The year ahead will test our political establishment to the limit.
//其中“-n"表示显示行号、“-i"表示不区分大小写,命令执行后,符合匹配标准的字符,字体颜色会变为红色

//若反向选择,如查找不包含“the”字符的行,则需要通过 grep 命令的"-v"选项实现,并配合“-n”一起使用显示行号
[root@localhost ~]# grep -vn 'the test.txt
1 :he was short and fat.
2:He was wearing a blue polo shirt with black pants.
3:The home of Football on BBC Sport online.
7:P=3.1415926535897932384626433832499014298:a wood cross!
9:Actions speak louder than words10:
11:#woood #
12:#woooooood #
13:AxyzxyzxyzxyzC
14:1 bet this place is really spooky late at night!
15:Misfortunes never come alone/single.
16:1 shouldn't have lett so tast.
(2)利用中括号"[ ]"来查找集合字符
//查找“shint”与"short”这两个字符串时,可以发现这两个字符串均包含“sh"与“rt”,
//此时执行以下命令即可同时査找到"shirt”与“shor”这两个字符串,其中“[]"中无论有几个字符,都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”
[root@localhost ~]# grep -n 'sh[io]rt' test.txt
1:he was short and fat.
2:He was wearing a blue polo shirt with black pants.

扩展:

//若要查找包含重复单个字符“oo”时
[root@localhost ~]# grep -n 'oo' test.txt
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword
8:a wood cross!
11:#woood #
12:#woooooood #
14:l bet this place is really spooky late at night!

//若查找“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
11:#woood #
12:#woooooood #
14:1 bet this place is really spooky late at night!
//在上述命令的执行结果中发现“woood”与"wooooood”也符合匹配规则,二者均包含"w”;“#woood #”中加粗显示的是“ooo”,而“oo"前面的“o”是符合匹配规则的

//若不希望“oo”前面存在小写字母,可以使用“grep -n'[^a-z]oo'test.txt”命令实现,其中"a-z"表示小写字母,大写字母则通过“A-Z”表示
[root@localhost ~]# grep -n '[^a-z]oo' test.txt
3:The home of Football on BBC Sport online.

//查找包含数字的行可以通过“grep -n[0-9]'test.txt”命令来实现
[root@localhost ~]# grep -n '[0-9] test.txt
4:the tongue is boneless but it breaks bones.12!
7:P=3.141592653589793238462643383249901429
(3)查找行首“^”与行尾字符“$”
//基础正则表达式包含两个定位元字符:“^”(行首)与“$”(行尾),如果想要査询以“the”字符串为行首的行,则可以通过“^”元字符来实现
[root@localhost ~]# grep -n '^the' test.txt
4:the tongue is boneless but it breaks bones.12!

//查询以小写字母开头的行可以通过“^[a-z]”规则来过滤,查询大写字母开头的行则使用“^[A-Z]”规则,若查询不以字母开头的行则使用“^[^a-zA-Z]”规则
[root@localhost ~]# grep -n '^[a-z]' test.txt
1:he was short and fat.
4:the tongue is boneless but it breaks bones.12!
5:google is the best tools for search keyword.
8:a wood cross!

[root@localhost ~]# grep -n '^[A-Z]' test.txt
2:He was wearing a blue polo shirt with black pants.
3:The home of Football on BBC Sport online.
6:The year ahead will test our political establishment to the limit.
7:P=3.141592653589793238462643383249901429
9:Actions speak louder than words
13:AxyzxyzxyzxyzC
14:l bet this place is really spooky late at night!
15:Misfortunes never come alone/single
16:l shouldn't have lett so tast.

[root@localhost ~]# grep -n '^[^a-zA-Z]' test.txt
11:#woood #
12:#woooooood #
//“^”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]”符号外则代表定位行首

//若想查找以某一特定字符结尾的行则可以使用“$”定位符
[root@localhost ~]# grep -n "\.$' test.txt
1 :he was short and fat.
2:He was wearing 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.
6:The year ahead will test our political establishment to the limit.
15:Misfortunes never come alone/single.
16:| shouldn't have lett so tast.
//小数点(.)在正则表达式中也是一个元字符,需要用转义字符"\"将具有特殊意义的字符转化成普通字符

//当查询空白行时,执行“grep -n'^$'test.txt”命令即可
[root@localhost ~]# grep -n '^$" test.txt
10:
(4)查找任意一个字符“.”与重复字符“*”
//正则表达式中小数点(.)也是一个元字符,代表任意一个字符
[root@localhost ~]# grep -n 'w..d' test.txt
5:google is the best tools for search keyword.
8:a wood cross!
9:Actions speak louder than words
//共有四个字符,以 w开头 d 结尾

//若想要査询 oo、ooo、oooo 等资料,则需要使用星号(*)元字符。
//但需要注意的是“*"代表的是重复零个或多个前面的单字符“o*”表示拥有零个(即为空字符)或大于等于一个“o”的字符
[root@localhost ~]# grep -n 'o*' test.txt        //会将文本所有内容都输出打印
[root@localhost ~]# grep -n 'oo*' test.txt       //第一个。必须存在,第二个o则是零个或多个o
[root@localhost ~]# grep -n 'ooo*' test.txt      //查询包含至少两个0以上的字符串
(5)查找连续字符范围“{}”
//因为“{}"在 Shel 中具有特殊意义,所以在使用“”字符时,需要利用转义字符“",将“”字符转换成普通字符
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.
8:a wood cross!
11:#woood #
12:#woooooood #
14:l bet this place is really spooky late at night!

2)查询以w开头以d结尾,中间包含2~5个o的字符串
[root@localhost ~]# grep -n 'wo\{2,5\}d'test.txt
8:a wood cross!
11:#woood #

3)查询以w开头以d结尾,中间包含2个或2个以上o的字符串
[root@localhost ~]# grep -n 'wo\{2,\}d' test.txt
8:a wood cross!
11:#woood #
12:#woooooood #
3:元字符总结

元字符

作用

^

匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配“^”字符本身,请使用“^”

$

匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则“$”也匹配'n'或'r要匹配“$”字符本身,请使用"$"

.

匹配除“\rn”之外的任何单个字符

\

反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义

*

匹配前面的子表达式零次或多次。要匹配“*”字符,请使用“\*”

[ ]

字符集合。匹配所包含的任意一个字符。例如,“[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

2)、扩展正则表达式

egrep 命令与 grep 命令的用法基本相似,egrep 命令是一个搜索文件获得模式,使用该命令可以搜索文件中的任意字符串和符号,也可以搜索一个或多个文件的字符串,一个提示符可以是单个字符、一个字符串、一个字或一个句子

元字符

作用及实例

+

作用:重复一个或者一个以上的前一个字符

示例:执行“egrep -n'wo+d' test.txt”命令,即可査询"wood""woood""woo00oood"等字符串

作用:零个或者一个的前一个字符

示例:执行“egrep -n'bes?t' test.txt"命令,即可査询“bet"“best”这两个字符串

|

作用:使用或者(or)的方式找出多个字符

示例:执行“egrep -n'oflislon' test.txt”命令即可査询"of"或者"if"或者"on"字符串

()

作用:查找“组”字符串

示例:“egrep -n't(ale)st test.txt”。“tast"与"test"因为这两个单词的"t"与"s!"是重复的,所以将“a”与“e”列于“()”符号当中,并以“”分隔,即可査询"tast"或者"test"字符串

()+

作用:辨别多个重复的组

示例:“egrep -n'A(xyz)+C' test.txt"。该命令是査询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思

二 、文本处理器

在 Linux/UNIX 系统中包含很多种类的文本处理器或文本编辑器,grep,sed,awk 更是 Shel 编程中经常用到的文本处理工具,被称之为 Shell 编程三剑客

1:sed工具及常见命令

sed(stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行

    • 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattem space)
    • 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行
    • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空
//通常情况下调用 sed 命令有两种格式:
//“参数”是指操作的目标文件,当存在多个操作对象时用,文件之间用逗号“,"分隔;
//而 scriptfile 表示脚本文件,需要用“-f选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件
sed[选项'操作"参数
sed [选项]-fscriptfile 参数

命令

描述

-e 或 --expression=

用指定命令或者脚本来处理输入的文本文件

-f 或 --file=

用指定的脚本文件来处理输入的文本文件

-h 或 --help

显示帮助

-n、--quiet 或 silent

表示仅显示处理后的结果,不显示其他输出

-i

直接编辑文本文件,而不是将结果输出到标准输出

“操作”用于指定对文件操作的动作行为,也就是 sed 的命令,通常情况下是采用的“[n1[,n2]]"操作参数的格式。n1、n2 是可选的,代表选择进行操作的行数

命令

描述

a

新增行,在指定的地址之后插入一行文本,a 的后面可以是字串,这些字串会在新的一行(即当前行的下一行)出现。

c

取代行,用指定的文本替换指定的行。c 的后面可以接字串,这些字串可以取代由地址参数指定的行。

d

删除行,删除由地址参数指定的行。因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行。

i

插入行,在指定的地址之前插入一行文本。i 的后面可以是字串,这些字串会在新的一行(即当前行的上一行)出现。

p

打印,将符合地址参数指定的行打印到标准输出。通常 p 会与sed -n选项一起使用,以仅打印匹配的行。

s

替换。使用指定的替换表达式替换匹配到的文本。s 的后面通常跟随一个替换表达式,

例如1,20s/old/new/g,用于替换符合条件的字符串(而不是整行)。通常这个 s 的动作可以搭配正则表达式。

y

字符转换。将一个字符集合中的字符转换为另一个字符集合中对应的字符。例如,y/abc/ABC 将所有小写字母 a 转换为 A,b 转换为 B,c 转换为 C。

(1)输出条件的文本(p表示正常输出)
[root@localhost ~]# sed -n 'p' test.txt            //输出所有内容,等同于 cat test.txt
[root@localhost ~]# sed -n '3p' test.txt          //输出第3行    
[root@localhost ~]# sed -n '3,5p' test.txt        //输出 3~5 行
[root@localhost ~]# sed -n 'p;n' test.txt        //输出所有奇数行,n表示读入下一行资料
[root@localhost ~]# sed -n 'n;p' test.txt        //输出所有偶数行,n表示读入下一行资料
[root@localhost ~]# sed -n'1,5{p;n} test.txt     //输出第 1~5 行之间的奇数行(第 1、3、5 行)
[root@localhost ~]# sed -n '10,$in;py' test.txt    //输出第 10 行至文件尾之间的偶数行
[root@localhost ~]# sed -n '/the/p' test.txt        //输出包含 the 的行
[root@localhost ~]# sed -n '4,/the/p' test.txt        //输出从第 4 行至第一个包含 the 的行
[root@localhost ~l# sed -n '/the/=" test.txt        //输出包含 the 的行所在的行号,等号(=)用来输出行号
[root@localhost ~l# sed -n '/^PI/p test.txt        //输出以 PI开头的行
[root@localhost ~]# sed -n '/[0-9]$/p" test.txt        //输出以数字结尾的行
[root@localhost ~]# sed -n '/\<wood\>/p' test.txt    //输出包含单词 wood 的行,<、\>代表单词边界
(2)删除符合条件的文本(d)
[root@localhost ~# nl test.txt | sed '3d'        //删除第3 行
[root@localhost ~]# nl test.txt | sed '3,5d'    //删除第 3~5 行
[root@localhost ~l# nl test.txt | sed '/cross/d'    //删除包含 cross 的行,如果要删除不包含 cross 的行,用!符号表示取反操作如'/cross/! d'
[root@localhost ~]# sed "/^[a-z]/d' test.txt        //删除以小写字母开头的行
[root@localhost ~]# sed 'n.$/d' test.txt            //删除以"."结尾的行
[root@localhost ~# sed "/^$/d' test.txt            //删除所有空行
(3)替换符合条件的文本
[root@localhost ~]# sed 's/the/THE/' test.txt        //将每行的第一个the换成THE
[root@localhost ~]# sed 's/l/L/2' test.txt           //将每行中的第2个l换成L
[root@localhost ~]# sed 's/the/THE/g' test.txt        //将文中所有的the换成THE
[root@localhost ~]# sed 's/o//g' test.txt            //将文中所有的o删除
[root@localhost ~]# sed 's/^/#/' test.txt            
[root@localhost ~]# sed 's/$/#/' test.txt            //在每行的行首插入#和在每行行尾添加#
[root@localhost ~]# sed '/the/s/^/#/' test.txt       //在包含the的每行的行首插入#
[root@localhost ~]# sed 's/$/EOF/' test.txt            //在每行的行尾插入字符串EOF
[root@localhost ~]# sed '3,5s/the/THE/g' test.txt     //将第3~5行中的所有the替换成THE
[root@localhost ~]# sed '/the/s/o/O/g' test.txt        //将包含the的所有行中的o都替换成O
(4)迁移符合条件的文本

命令

描述

H

复制到剪切板

g

将剪切板中的内容覆盖到指定行

G

将剪切板中的内容追加到指定行

w

保存文件

r

读取指定文件

a

追加指定内容

sed '/the/{H;d};$G' test.txt       //将包含 the 的行迁移至文件末尾,{;}用于多个操作
sed '1,5{H;d};17G' test.txt        //将第 1~5 行内容转移至第 17 行后
sed '/the/w out.file' test.txt        //将包含 the 的行另存为文件 out.file
sed '/the/r /etc/hostname' test.txt    //将文件/etc/hostname 的内容添加到包含 the 的每行以后
sed '3aNew test.txt                //在第 3行后插入一个新行,内容为 New
sed '/thelaNew' test.txt            //在包含 the 的每行后插入一个新行,内容为 New
sed '3aNew1inNew2' test.txt        //在第 3 行后插入多行内容,中间的\n 表示换行
(5)使用脚本编辑文本
sed '/the/{H;d};$G' test.txt       //将包含 the 的行迁移至文件末尾,{;}用于多个操作
sed '1,5{H;d};17G' test.txt        //将第 1~5 行内容转移至第 17 行后
sed '/the/w out.file' test.txt        //将包含 the 的行另存为文件 out.file
sed '/the/r /etc/hostname' test.txt    //将文件/etc/hostname 的内容添加到包含 the 的每行以后
sed '3aNew test.txt                //在第 3行后插入一个新行,内容为 New
sed '/thelaNew' test.txt            //在包含 the 的每行后插入一个新行,内容为 New
sed '3aNew1inNew2' test.txt        //在第 3 行后插入多行内容,中间的\n 表示换行
2:文本处理器awk

awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理

awk常见用法

awk 选项'模式或条件{编辑指令}文件1文件 2...        //过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件1 文件 2...            //从脚本中调用编辑指令,过滤并输出内容

(1)按行输出文本
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         //统计以空行分隔的文本段落数
(2)按字段输出文本
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的行的第一个字段

变量/参数

描述

FS

指定每行文本的字段分隔符,默认为空格或制表位

NF

当前处理的行的字段个数

NR

当前处理的行的行号(序数)

$0

当前处理的行的整行内容

$n

当前处理行的第n个字段(第n列),n为数字,表示字段位置

FILENAME

被处理的文件名

(3)通过管道、双引号调用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}'      ##输出当前主机名
3: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

示例 3:将/etc/passwd 文件中第三列进行排序,并将输出内容保存至 user.txt 文件中。
[root@localhost ~]# sort -t ':' -k 3 /etc/passwd -o user.txt
[root@localhost ~]# cat user.txt

选项

描述

-r

反向排序

-t

指定分隔符,默认使用[Tab]键分隔

-k

指定排序区域

4: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

示例 3:查找 testfile 文件中的重复行。
[root@localhost ~]# uniq -d testfile 
Linux 30 
CentOS 6.5 
CentOS 7.3

选项

描述

-c

进行计数,显示每行出现的次数

-d

仅显示重复行,即多次出现的行

5:tr 工具

tr 命令常用来对来自标准输入的字符进行替换、压缩和删除。可以将一组字符替换之后变成另一组字符

uniq [选项] 参数

选项

描述

-c

取代所有不属于第一字符集的字符

-d

删除所有属于第一字符集的字符

-s

把连续重复的字符以单独一个字符表示

-t

假设的选项,可能用于先删除第一字符集较第二字符集多出的字符(非标准 tr 选项)

示例 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.

示例 3:删除字符串中某些字符。
[root@localhost ~]# echo 'hello world' | tr -d 'od' 
hell wrl

选项

描述

-d

删除所有属于第一字符集的字符

-s

把连续重复的字符以单独一个字符表示(对于剩余的字符)

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部