ITPub博客

首页 > > > shell正则表达式-2

shell正则表达式-2

作者:longmanma 时间:2019-12-10 13:43:30 0 删除 编辑

匹配符:匹配字符串

匹配符说明

.匹配除回车以外的任意字符

( )字符串分组

[ ]定义字符类,匹配括号中的一个字符

[ ^ ]表示否定括号中出现字符类中的字符,取反。

\转义字符

\或

测试案例

1)精确匹配 以a开头c结尾 中间任意 长度为三个字节的字符串

[root@www ~]# egrep "^a.c$" file

acc

abc

a_c

aZc

a c

a3c

2)模糊匹配 以cc结尾的字符串 因为$只能锚定单个字符,如果是一个字符串就需要用()来做定义

[root@www ~]# egrep "(cc)$" file

abcc

aabbcc

acc

ccc

3)精确匹配 以a开头c结尾 中间是a-z,0-9 长度为三个字节的字符串

[root@www ~]# egrep "^a[a-z0-9]c$" file

acc

abc

a3c

4)精确匹配 以a开头c结尾 中间不包含a-z,0-9 长度为三个字节的字符串

[root@www ~]# egrep "^a[^a-z0-9]c$" file

a_c

aZc

a c

5)精确匹配 以e开头f结尾 中间是*号 长度为三个字节的字符串 e*f

[root@www ~]# egrep "^e\*f$" file

e*f

6)精确匹配 以a开头b或c结尾 中间是任意 长度为三个字节的字符串

[root@www ~]# egrep "^a.(b|c)$" file

acc

abc

asb

a_c

aZc

a c

a3c

限定符:对前面的字符或者字符串做限定说明

限定符说明

*某个字符之后加星号表示该字符不出现或出现多次

?与星号相似,但略有变化,表示该字符出现一次或不出现

+与星号相似,表示其前面字符出现一次或多次,但必须出现一次

{n,m}某个字符之后出现,表示该字符最少n次,最多m次

{m}正好出现了m次

测试案例

1)精确匹配 以a开头 c结尾 中间是有b或者没有b 长度不限的字符串

[root@www ~]# egrep "^ab*c$" file

ac

abbc

abbbc

abbbbbc

abc

2)精确匹配 以a开头 c结尾 中间只出现一次b或者没有b的字符串

[root@www ~]# egrep "^ab?c$" file

ac

abc

3)精确匹配 以a开头 c结尾 中间是有b且至少出现一次 长度不限的字符串

[root@www ~]# egrep "^ab+c$" file

abbc

abbbc

abbbbbc

abc

4)精确匹配 以a开头 c结尾 中间是有b且至少出现两次最多出现四次 长度不限的字符串

[root@www ~]# egrep "^ab{2,4}c$" file

abbc

abbbc

5)精确匹配 以a开头 c结尾 中间是有b且正好出现三次的字符串

[root@www ~]# egrep "^ab{3}c$" file

abbbc

6) 精确匹配 以a开头 c结尾 中间是有b且至少出现一次的字符串

[root@www ~]# egrep "^ab{1,}c$" file

abbc

abbbc

abbbbbc

abc

三、POSIX特殊字符

特殊字符说明

[:alnum:]匹配任意字母字符0-9 a-z A-Z

[:alpha:]匹配任意字母,大写或小写

[:digit:]数字 0-9

[:graph:]非空字符( 非空格控制字符)

[:lower:]小写字符a-z

[:upper:]大写字符A-Z

[:cntrl:]控制字符

[:print:]非空字符( 包括空格)

[:punct:]标点符号

[:blank:]空格和TAB字符

[:xdigit:]16 进制数字

[:space:]所有空白字符( 新行、空格、制表符)

测试案例

注意[[ ]] 双中括号的意思: 第一个中括号是匹配符[] 匹配中括号中的任意一个字符,第二个[]是格式 如[:digit:]

1)精确匹配 以a开头c结尾 中间a-zA-Z0-9任意字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:alnum:]]c$" file

acc

abc

aZc

a3c

2)精确匹配 以a开头c结尾 中间是a-zA-Z任意字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:alpha:]]c$" file

acc

abc

aZc

3)精确匹配 以a开头c结尾 中间是0-9任意字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:digit:]]c$" file

a3c

4)精确匹配 以a开头c结尾 中间是a-z任意字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:lower:]]c$" file

acc

abc

4)精确匹配 以a开头c结尾 中间是A-Z任意字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:upper:]]c$" file

aZc

5)精确匹配 以a开头c结尾 中间是非空任意字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:print:]]c$" file

acc

abc

a_c

aZc

a c

a3c

6)精确匹配 以a开头c结尾 中间是符号字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:punct:]]c$" file

a_c

7)精确匹配 以a开头c结尾 中间是空格或者TAB符字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:blank:]]c$" file

a c

类似

[root@www ~]# egrep "^a[[:space:]]c$" file

a c

8)精确匹配 以a开头c结尾 中间是十六进制字符 长度为三个字节的字符串

[root@www ~]# egrep "^a[[:xdigit:]]c$" file

acc

abc

a3c

说明:特殊字符和POSIX字符是两套字符,都可以完成需要的匹配,大家学习的时候最少要记住一套字符并熟练应用。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2730/viewspace-3132666/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-18

  • 博文量
    492
  • 访问量
    11996