目录

正则表达式学习

准备

准备个示例文件,内容如下,方便后期学习:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ac
abc
Abc
aBc
abC
1bc
a2c
ab3
a_c
a*c

匹配符

精确 or 模糊匹配

匹配符 说明
^ 锚定开头 ^a 以a开头,默认锚定一个字符
$ 锚定结尾 $a 以a结尾,默认锚定一个字符
  • 如果两个一起使用,代表精确匹配
  • 如果只是用其中一个,代表模糊匹配

EG:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# egrep "^ac$" file
ac

# egrep "^a" file
ac
abc
aBc
abC
a2c
ab3
a_c
a*c

# egrep "c$" file
ac
abc
Abc
aBc
1bc
a2c
a_c
a*c

匹配字符串

匹配符 说明
. 匹配除回车外任意字符
( ) 字符串分组
[ ] 定义字符类,匹配括号中的一个字符
[^] 表示否定括号中出现的字符类中的字符,取反
\ 转义字符
|

EG:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# egrep "^a.c$" file
abc
aBc
a2c
a_c
a*c

# egrep "^(a|1).c$" file
abc
aBc
1bc
a2c
a_c
a*c

# egrep "^a[0-9]c$" file
a2c

# egrep "^a[^0-9]c$" file
abc
aBc
a_c
a*c

# egrep "^a\*c$" file
a*c

限定符

匹配符 说明
* 某个字符之后加星号表示该字符不出现或出现多次
? 与星号类似,但是略有变化,表示该字符出现一次,或不出现
+ 与星号类似,表示其前面字符出现一次或多次,但必须出现一次
{n,m} 某个字符之后出现,便是该字符最少n次,最多m次
{m} 正好出现了m次

EG:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# egrep "^ab*c$" file
ac
abc

# egrep "^ab?c$" file
ac
abc

# egrep "^ab+c$" file
abc

# egrep "^ab{0,1}c$" file
ac
abc

# egrep "^ab{4,5}c$" file


# egrep "^ab{0}c$" file
ac

POSIX字符

特殊字符 说明
[:alnum:] 匹配任意字母字符0-9 a-z A-Z
[:alpha:] 匹配任意字母,大写或小写
[:digit:] 数字 0-9
[:graph:] 非空字符(非空格控制字符)
[:lower:] 小写字符a-z
[:upper:] 大写字符A-Z
[:cntrl:] 控制字符
[:print:] 非空字符(包括空格)
[:punct:] 标点符号
[:black:] 空格和TAB
[:xdigit:] 16进制数字
[:space:] 所有空白字符(新行、空格、制表符)
  • [ ]:双中括号的意思是,第一个中括号是匹配符 ,匹配中括号中的任意一个字符,第二个 是格式

EG:

1
2
3
4
5
6
7
# egrep "^a[[:alnum:]]" file
ac
abc
aBc
abC
a2c
ab3

简单应用

过滤ip地址

1
egrep "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9]).){4}" file