Shell正则表达式
一、正则表达式
1、定义
正则表达式,又称正规表达式、常规表达式。
使用字符串来描述、匹配一系列符合某个规则的字符串。
正则表达式组成:
普通字符:大小写字母、数字、标点符号及一些其他符号
元字符:具有特殊意义的专用字符
2、层次
基础正则表达式
扩展正则表达式
3、基础元字符
\:转义字符,\!、\?、\n等
^:匹配字符开始的位置,^a、^the等
$:匹配字符结束的位置,word$等
.:匹配出\n之外的任意一个字符
3.1实例
goo*d //匹配出good,god等
go.*d //匹配出go d,中间任意任何长度的项,.*为任意长度字符
[list]:匹配list列表中的一个字符
只要是liuruizhi其中之一,都能匹配:
[root@lrz ~]# echo lrz | grep [liuruizhi]
lrz
[root@lrz ~]# echo liuruizhi1 | grep [liuruizhi]
(liuruizhi)1
[root@lrz ~]# echo liuruizhinb | grep [liuruizhi]
(liuruizhi)nb
匹配大小写:
[root@lrz ~]# echo ABC | grep [a-z]
[root@lrz ~]# echo ABC | grep [A-Z]
ABC
匹配数字字母:
[root@lrz ~]# echo ABC12 | grep [A-Z0-9]
ABC12
[root@lrz ~]# echo abc12 | grep [A-Z0-9]
(abc)12
匹配全部大小写:
[root@lrz ~]# echo abc12 | grep [A-Za-z]
匹配以....开头:
[root@lrz ~]# echo abc12 | grep ^[A-Za-z]
匹配特殊字符:
[root@lrz ~]# echo abc12 | grep [^A-Za-z]
匹配特殊字符开头:
[root@lrz ~]# echo abc12 | grep ^[^A-Za-z]
匹配前面字符最少出现1次:
[root@lrz ~]# echo abc12 | grep "ab\{1,}\c"
匹配前面字符最多出现2次:
[root@lrz ~]# echo abc12 | grep "ab\{,2}\c"
匹配前面字符出现1-3次:
[root@lrz ~]# echo abc12 | grep "ab\{1,3}\c"
3.2总结
注:
4、扩展元字符
4.1 实例
grep -E = egrep
匹配o一次以上:
[root@lrz ~]# echo good gooood | grep -E "go+d"
匹配g一次以上:
[root@lrz ~]# echo ggggd ggd | egrep "g+d"
宽容匹配g d(g,d有其一就行):
[root@lrz ~]# echo aaagd gggd ggd | grep -E "g?d"
精确匹配good:
[root@lrz ~]# echo good goodssss | grep -E "(good)"
good至少出现一次:
[root@lrz ~]# echo good goodssss | grep -E "(good)+"
.............
5、思考题
匹配出网卡配置文件中有IP地址的行: