正则表达式
1. 正则表达式分类
正则表达式:REGEXP,REGular EXPression。
正则表达式分为两类:
- Basic REGEXP(基本正则表达式)
- Extended REGEXP(扩展正则表达式)
2. 基本正则表达式
//元字符
. //任意单个字符
[] //匹配指定范围内的任意单个字符
[^] //匹配指定范围外的任意单个字符
//匹配次数(贪婪模式)
* //匹配其前面的任意单个字符任意次
.* //任意长度的任意字符
\? //匹配其前面的任意单个字符1次或0次
\+ //匹配其前面的任意单个字符至少1次
\{m,n\} //匹配其前面的任意单个字符至少m次,至多n次
//位置锚定
^ //锚定行首,此字符后面的任意单个字符必须出现在行首
$ //锚定行尾,此字符前面的任意单个字符必须出现在行尾
^$ //空白行
\<或\b //锚定词首,其后面的任意单个字符必须作为单词首部出现
\>或\b //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
/分组
\(\)
例:\(ab\)*
//后向引用
\1 //引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 //引用第二个左括号以及与之对应的右括号所包括的所有内容
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
4.正则表达式案例
[root@zabbix ~]# cat > nidaye << EOF
> aksdjk
> images
> aaabbb
> sakdhkkkjwu
> haoouldayou
> acbdd
> sbckeu
> EOF
^ 查找以什么开头的行
[root@zabbix ~]# grep '^a' nidaye
aksdjk
aaabbb
acbdd
$ 查找以什么结尾的行
[root@zabbix ~]# grep 'u$' nidaye
sakdhkkkjwu
haoouldayou
sbckeu
^$排除空行
[root@zabbix ~]# grep -v '$^' nidaye
aksdjk
images
aaabbb
sakdhkkkjwu
haoouldayou
acbdd
sbckeu
. 匹配单个任意字符
[root@zabbix ~]# grep '.' nidaye
aksdjk
images
aaabbb
sakdhkkkjwu
haoouldayou
acbdd
sbckeu
\转义字符(将\放在任意字符前面后面的字符都将失去意义)
[root@zabbix ~]# grep '\.' nidaye
[root@zabbix ~]#
*匹配前一个字符(连续出现)0次或多次
[root@zabbix ~]# touch lx lxx lxxxxxx
[root@zabbix ~]# ls | grep 'lx*'
Dockerfile
compute_lx.sh
httpd_lx.sh
lx
lx.sh
lxx
lxxxxxx
mysql_install.sh
.*匹配所有字符
[root@zabbix test]# ls | grep '.*'
1a
1b
1c
1d
1e
1f
1g
1h
1i
1j
1k
1l
2a
.....
[] 匹配[]内包含的任意一个字符
[root@zabbix test]# ls | grep [6ab]
1a
1b
2a
2b
3a
3b
4a
4b
5a
5b
6a
6b
6c
6d
6e
6f
6g
6h
6i
6j
6k
6l
[^] 匹配除了[^]内的任意其他字符(取反)
[root@zabbix test]# ls | grep '[^a]'
1b
1c
1d
1e
1f
1g
1h
1i
1j
1k
1l
+匹配前面一个字符1次或多次
基础正则
\+
[root@zabbix ~]# grep 'a\+' nidaye
aksdjk
images
aaabbb
sakdhkkkjwu
haoouldayou
acbdd
扩展正则
[root@zabbix ~]# egrep '+a' nidaye
aksdjk
images
aaabbb
sakdhkkkjwu
haoouldayou
acbdd
?匹配前面一个字符0次或一次
[root@zabbix test]# ls | egrep '[abc$]'
ab
abc
abcc
\<
或\b
锚定词首
[root@zabbix ~]# cat > rdp << EOF
> hello word nidaye hhh
> nidaye you like home
> EOF
[root@zabbix ~]# grep '\<w' rdp
hello word nidaye hhh
[root@zabbix ~]# egrep '\bn' rdp
hello word nidaye hhh
nidaye you like home
\>
或\b
锚定词尾
[root@zabbix ~]# egrep 'h\>' rdp
hello word nidaye hhh
[root@zabbix ~]# egrep 'e\b' rdp
hello word nidaye hhh
nidaye you like home
d nidaye hhh
[root@zabbix ~]# egrep ‘\bn’ rdp
hello word nidaye hhh
nidaye you like home
`\>`或`\b` 锚定词尾
```bash
[root@zabbix ~]# egrep 'h\>' rdp
hello word nidaye hhh
[root@zabbix ~]# egrep 'e\b' rdp
hello word nidaye hhh
nidaye you like home