正则表达式
特殊字符
定位符:同时锚定开头和结尾,做精确匹配;单一锚定开头和结尾,做模糊匹配
^ 锚定开头
$ 锚定结尾
案例
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

浙公网安备 33010602011771号