LinuxShell编程基础入门(二)之正则表达式

LinuxShell编程基础入门(二)之正则表达式

正则表达式是什么?

正则表达式(regular expression)是一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等,简而言之,正则表达式就是记录文本规则的代码,打个比方:有一个嫌疑人,只知道性别是男,圆脸,脚下有痣,那么警察叔叔去查找通缉犯的时候一定会去找符合这些特征的人,不会去找一个女人,查找具有这些特征的人能够有效的缩小查找的范围,有利于更快的破案,那么通缉犯的特征就像是一个正则表达式,而人就像是字符串,只有符合规则的字符串,系统才会对其进行查找和其他操作。

正则表达式的基本元素是由普通字符和元字符组成,普通字符就是我们平常看到的字面上的字符,仅仅是字面上的意思,没有其他隐藏的含义,比如"a","b","c","1"。而元字符,shell赋予了它们超越了字面上的含义,如:" * "符号的字面意义只是一个符号,而实际上却表示了重复前面的字符0次或多次的隐藏含义。由此来说,掌握正则表达式基本元素其实主要是对正则表达式中元字符意义的掌握。

正则表达的元字符的意义和用法

(1)" * "符号

" * "符号用于匹配前面一个普通字符的0次或多次重复,举个例子:假设现在我们有一个叫test.sh的文件,文件中有一些字符串,我们现在要查找出首尾是以字母"t"开头的,并且中间字符有0~N个"e"字母的字符串。此时的正则表达式就可以写成:te*t , " * " 号的前面一个字符是e,那么"*"字符就表示匹配到0次或者多次"e"字符,使用grep命令查找结果如下图:

LinuxShell编程基础入门(二)之正则表达式

(2)" . "符号

点号" . "用于匹配任意一个字符。举个例子:假设现在我们有一个叫test.sh的文件,文件中有一些字符串,我们现在要查找出首尾是以字母"t"开头的,并且中间字符只有1个字符的字符串。此时的正则表达式可以写成:t.t ,使用grep命令查找结果如下图:

LinuxShell编程基础入门(二)之正则表达式

从执行的结果我们值得注意的是:"."符号也可以匹配到空格,也就是说任意的字符也是包括空格的。

(3)" ^ "符号

“^”符号用于匹配行首,表示行首的字符是"^"字符后面的那个字符。举个例子:假设现在我们有一个叫test.sh的文件,文件中有一些字符串,我们现在要查找以行首是"you"的内容,使用grep命令查找结果如下图:

LinuxShell编程基础入门(二)之正则表达式

(4)" $ "符号

$符号匹配行尾,$符号放在匹配字符之后,与“^”符号的功能和用法都相反,举个例子:假设现在我们有一个叫test.sh的文件,文件中有一些字符串,我们现在要查找以行尾是"you"的内容,使用grep命令查找结果如下图:

LinuxShell编程基础入门(二)之正则表达式

注意两点:"$"号是写在"you"的后面不是前面,并且"you"和$之间要有一个空格隔开,否者可能查不到。

(5)" [] "符号

方括号" [] "匹配字符集合,该符号支持穷举方法列出字符集合的所有元素,也支持使用“-”符号表示字符集合范围,表明字符集合范围从" - "左边字符开始,到" - "右边字符结束。举个例子:假设现在我们有一个叫test.sh的文件,文件中有一些字符串,我们现在要查找test.sh文件中所有小写的字符串内容,使用grep命令查找的结果如下图:

LinuxShell编程基础入门(二)之正则表达式

上文我们说过," ^ "符号表示匹配行首,但是," ^ "符号放到" [] "符号中就不再表示匹配行首了,而是表示取反符号,举个例子:假设现在我们有一个叫test.sh的文件,文件中有一些字符串,我们现在要查找test.sh文件中所有大写的字符串内容,使用grep命令查找的结果如下图:

LinuxShell编程基础入门(二)之正则表达式

(6)" \ "符号

“\”符号是转义符,用于屏蔽一个元字符的特殊意义,即以字面含义来解释“\”符号后面的元字符。我们来演示一下元字符 " . "在使用转义字符和不使用转义字符的查询效果,结果如下图:

LinuxShell编程基础入门(二)之正则表达式

从结果中我们发现,当没有使用转义字符的时候,"."表示用于匹配任意一个字符,而我们使用了转义字符后,屏蔽了元字符"."的特殊意义,所以"."只是字面含义,就是一个点号。

(7)" \ "符号

“\”符号是精确匹配符号,该符号利用“\”符号屏蔽“<>”符号,如正则表达式:\,该正则表达式表示精确匹配包含you字符的单词,但是包含you的单词是不匹配的,比如your虽然单词中包含you但是是不匹配的,以test.sh文件为例,使用grep命令查找的结果如下图:

LinuxShell编程基础入门(二)之正则表达式

(8)" \{ \ } "符号

“\{\}”系列符号与“*”符号类似,都是表示前一个字符的重复。但是“ * ”符号表示重复0次或任意次,而“\{\}”系列符号是可以指定重复次数,“\{\}”系列符号包括以下三种形式。

第一种:匹配前面字符出现n次。比如正则表达式:te\{3\}t,那么就表示重复e三次,使用grep命令查找的结果如下图:

LinuxShell编程基础入门(二)之正则表达式

第二种 :\{n,\}:匹配前面字符至少出现n次。比如正则表达式:te\{3,\}t,那么就表示最少重复e三次,使用grep命令查找的结果如下图:

LinuxShell编程基础入门(二)之正则表达式

第三种:\{n,m\}:匹配前面字符出现n~m次。比如正则表达式:te\{0,3\}t,那么就表示重复的次数是0到3次之间的,使用grep命令查找的结果如下图:

LinuxShell编程基础入门(二)之正则表达式

每日一小练,日久可成仙

当登录Linux时,一个具有唯一进程ID号的shell将被调用

这个ID是什么? (单选)
0
0%
A. NID
0
0%
B. PID
0
0%
C. UID
0
0%
D. CID

昨日答案是:rm

小二不足之处,还请各位客官多多指点


分享到:


相關文章: