正则表达式
1. 正则表达式分类
正则表达式:REGEXP,REGular EXPression。
正则表达式分为两类:
- Basic REGEXP(基本正则表达式)
- Extended REGEXP(扩展正则表达式)
2. 基本正则表达式
//元字符
## . //任意单个字符
[root@zabbix opt]# ls
1 2 3 4 5 6 7 8 9 a ab abc abcc addcc b c d e f g h i j k l m n o p q r s t u v w x y z
[root@zabbix opt]# ls | grep '^.$'
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
[root@zabbix opt]#
## [] //匹配指定范围内的任意单个字符
[root@zabbix opt]# ls | grep '^[abc]$'
a
b
c
[root@zabbix opt]# ls | grep '^[a-hz]$'
a
b
c
d
e
f
g
h
z
[root@zabbix opt]#
## [^] //匹配指定范围外的任意单个字符
[root@zabbix opt]# ls | grep '^[^1-9a-hz]$'
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
[root@zabbix opt]#
//匹配次数(贪婪模式)
## * //匹配其前面的任意单个字符任意次
[root@zabbix opt]# ls | grep '^abc*$'
ab
abc
abcc
[root@zabbix opt]# ls | grep '^ab*c*$'
a
ab
abbccc
abc
abcc
[root@zabbix opt]#
## .* //任意长度的任意字符
[root@zabbix opt]# ls | grep '^abc.*$'
abc
abcc
abcccc
abccccccc
[root@zabbix opt]#
## \? //匹配其前面的任意单个字符1次或0次
[root@zabbix opt]# ls | grep '^a\?b$'
ab
b
[root@zabbix opt]# ls | grep '^ab\?$'
a
ab
## \+ //匹配其前面的任意单个字符至少1次
[root@zabbix opt]# ls | grep '^abc\+$'
abc
abcc
abcccc
abccccccc
[root@zabbix opt]# ls | grep '^ab\+c$'
abbbbbc
abc
[root@zabbix opt]#
## \{m,n\} //匹配其前面的任意单个字符至少m次,至多n次
[root@zabbix opt]# ls | grep '^abc\{1,3\}$'
abc
abcc
[root@zabbix opt]#
//位置锚定
## ^ //锚定行首,此字符后面的任意单个字符必须出现在行首
## $ //锚定行尾,此字符前面的任意单个字符必须出现在行尾
[root@zabbix opt]# ls | grep '^a'
a
ab
abbbbbc
abbccc
abc
abcc
abcccc
abccccccc
addcc
[root@zabbix opt]# ls | grep 'a$'
a
[root@zabbix opt]#
## ^$ //空白行
## \<或\b //锚定词首,其后面的任意单个字符必须作为单词首部出现
[root@zabbix opt]# grep '\bhello' a
hello tom hello zwl hello abc
hello sljfasfj hello klsjfaj
[root@zabbix opt]#
## \>或\b //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
[root@zabbix opt]# grep 'hello\b' a
hello tom hello zwl hello abc
hello sljfasfj hello klsjfaj
selllhello lajfiojsdafhello
/分组
## \(\)
例:\(ab\)*
## //后向引用
## \1 //引用第一个左括号以及与之对应的右括号所包括的所有内容
## \2 //引用第二个左括号以及与之对应的右括号所包括的所有内容
[root@zabbix opt]# ls | grep '\(ab\)'
ab
abbbbbc
abbccc
abc
abcc
abcccc
abccccccc
[root@zabbix opt]#
3. 扩展正则表达式
//字符匹配
. //匹配任意单个字符
[] //匹配指定范围内的任意单个字符
[^] //匹配指定范围外的任意单个字符
//次数匹配
* //匹配其前面的任意单个字符任意次
? //匹配其前面的任意单个字符1次或0次
+ //匹配其前面的任意单个字符至少1次
{m,n} //匹配其前面的任意单个字符至少m次,至多n次
//位置锚定
^ //锚定行首,此字符后面的任意单个字符必须出现在行首
$ //锚定行尾,此字符前面的任意单个字符必须出现在行尾
^$ //空白行
\<或\b //锚定词首,其后面的任意单个字符必须作为单词首部出现
\>或\b //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
//分组
() //分组
\1,\2,\3,....
例:(ab)*
//后向引用
\1 //引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 //引用第二个左括号以及与之对应的右括号所包括的所有内容
//或者
| //or 默认匹配|的整个左侧或者整个右侧的内容
//例:C|cat表示C或者cat,要想表示Cat或者cat则需要使用分组,如(C|c)at