正则表达式

特殊字符

定位符:同时锚定开头和结尾,做精确匹配;单一锚定开头和结尾,做模糊匹配

^  锚定开头

$  锚定结尾

案例

1 精确匹配 以a开头c结尾的字符串

egrep "^ac$" file

2 模糊匹配 以a开头

egrep "^a" file

匹配符:匹配字符串

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

()   字符串分组

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

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

\  转义字符

|  管道符 或的意思

例子:

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

egrep "^a.c$" file

2 精确匹配 以a开头c结尾,中间为0-9中一个数字,长度为三个字节的字符串

egrep "^a[0-9]c$"

3 精确匹配 以a开头c结尾,中间为非数字,长度为三个字节的字符串

egrep "^a[^0-9]c$"

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

egrep "^a\*c$" file

5 精确匹配 以a或b开头c结尾,中间星号,长度为三个字节的字符串

egrep "^(a|b)\*c$" file

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

*     表示前面的字符不出现或出现多次

?    表示前面的字符不出现或出现一次

+    表示前面的字符出现一次或多次

{n,m}   表示前面的字符出现最少n次,最多m次

{m}         正好出现m次

例子:

1 精确匹配 以a开头c结尾,中间任意个b的字符串

egrep "^ab*c$" file

2 精确匹配 以a开头c结尾,中间0或1个b的字符串

egrep "^ab?c$" file

3 精确匹配 以a开头c结尾,中间至少1个b的字符串

egrep "^ab+c$" file

4 精确匹配 以a开头c结尾,中间3个b的字符串

egrep "^ab{3}c$" file

5 精确匹配 以a开头c结尾,中间3-5个b的字符串

egrep "^ab{3,5}c$" file

POSIX特殊字符 

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

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

[:digit:]               匹配数字 0-9

[:graph:]            匹配非空字符 不包括空格

[:lower:]             匹配小写字母

[:upper:]            匹配大写字母

[:cntrl:]              匹配控制字符

[:print:]              匹配非空字符 包括空格

[:punct:]            标点符号

[:blank:]            空格和tab字符

[:xdigit:]            16进制数字

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

例子   

1 精确匹配 以a开头c结尾,中间为一个字母数字的字符串

egrep "^a[[:alnum:]]c$" file

2 精确匹配 以a开头c结尾,中间为一个数字的字符串

egrep "^a[[:digit:]]c$" file

应用

匹配合法的IP地址

egrep '^((25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?).){3}(25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?)$' --color ip_base

 

posted @ 2021-01-19 16:18  goldtree358  阅读(245)  评论(0)    收藏  举报