【Linux学习笔记】37:基础正则表达式元字符

来源:互联网 发布:linux top命令详解 编辑:程序博客网 时间:2024/05/20 16:37

到我的Linux笔记的36节,Tony老师的Shell环境变量配置文件课程学完了,从本节开始学习Shell正则表达式课程。

正则表达式不是通配符

①正则表达式用来做字符串的模式分割、匹配、查找、替换。正则用来在文件中匹配字符串,grep、awk、sed命令支持正则;通配符用来匹配文件名,ls、find、cp命令支持通配符。
②通配符是完全匹配,就是匹配项是什么样的找到的就必须是这样的;正则表达式是包含匹配,真正匹配到的项可以包含正则中给出的模式。

[root@localhost ~]# grep "size" anaconda-ks.cfg 

这里写图片描述
可以看到只要含有size的行都会被找出来,这里grep的第一个参数用的就是正则表达式。
③多数语言都支持正则表达式,多数语言都没有通配符的概念。

Shell基础正则表达式的元字符

在Shell中正则分为基础正则和扩展正则,课程里主要学基础正则表达式。下面是基础正则表达式的内容。
这里写图片描述
而?和()在Shell正则中也是识别的,不过属于扩展正则的内容。

①*前一个字符重复自然数次

如在文件中写入:
这里写图片描述
在/root/.bashrc文件里给grep一个别名,使用它时候可以高亮显示:
这里写图片描述

[root@localhost mulu]# source /root/.bashrc

例如:

[root@localhost mulu]# grep "a*" test.txt

这里写图片描述
这在正则中不表示以a开头,而是a重复自然数次就可以,重复0次也是可以的,而且因为是包含匹配,所以整篇文章都(包含重复0次的a)被匹配出来了。这个正则是没有什么意义的。

例如:

[root@localhost mulu]# grep "aa*" test.txt

这里写图片描述
这表示至少匹配一个a,后面的内容是什么都行(也是没意义的),可以包含自然数个a。注意这个a虽然在前面也不表示行首,因为正则中的行首不是这样表示的,而仅仅是包含a就行了。

例如:
文件改成:
这里写图片描述

[root@localhost mulu]# grep "aa*" test.txt

这里写图片描述
可以看到即便行首不是a,只要有a就行了。

例如:

[root@localhost mulu]# grep "aa" test.txt

这里写图片描述
匹配连续的两个a。

②.匹配除了换行符外任意一个字符

这个符号的功能类似于通配符中的问号。

修改文档:
这里写图片描述

例如:

[root@localhost mulu]# grep "s.b" test.txt 

这里写图片描述

例如:

[root@localhost mulu]# grep "s...b" test.txt saaab

注意区分:
这里写图片描述
前者表示s后接任意多个任意字符再接b,后者表示任意多个s接b。

③^匹配行首,$匹配行尾

例如:
这里写图片描述
匹配以小写s开头的行。

例如:
这里写图片描述
匹配以小写b结尾的行。

例如:
这里写图片描述
匹配以s开头,中间任意,b结尾的行。

例如:

[root@localhost mulu]# grep -n "^$" test.txt

匹配空白行。因为这样看到的一定是空白,所以grep后面加个-n参数来显示行号。

④[]匹配其中所指定的任意一个字符

它和通配符中的中括号作用一致。

例如:
这里写图片描述
它的常用用法有很多,如”[0-9]”匹配任意一个数字,”^[a-z]”匹配小写字母开头的行等。

⑤[^]匹配除其中所指定字符外的任意一个字符

中括号之内的尖号代表取反,而中括号外的尖号才代表匹配行首。
例如:
这里写图片描述
也有很多用法,如”^[^a-zA-Z]”匹配不用字母开头的行。

在有些语言的正则中可以用A-z表示所有的字母,但在Shell中不行,需要用a-zA-Z来表示所有的字母。

⑥\转义符

使得某些在正则中有特殊意义的字符变回没有特殊意义的字符作正常匹配。

修改文件:
这里写图片描述

例如:
这里写图片描述
匹配以”.”结尾的行。

而不是:
这里写图片描述
这时”.”的特殊作用没丧失,表示任意字符。

⑦\{n\}匹配其前面的字符恰好出现n次

例如:
这里写图片描述
实际上因为正则是包含匹配,恰好n次就是至少n次。

例如:
这里写图片描述
这时候就匹配m正好出现3次了。

⑧\{n,\}匹配其前面的字符至少出现n次

两侧不加限制时,它和\{n\}没有区别。

例如:
这里写图片描述

⑨\{n,m\}匹配其前面的字符出现n~m次

例如:
这里写图片描述

原创粉丝点击