正则表达式
正则表达式分类
正则表达式:REGEXP,REGular EXPression。
正则表达式分为两类:
- Basic REGEXP(基本正则表达式)
- Extended REGEXP(扩展正则表达式)
基本正则表达式
//元字符
. //任意单个字符
[] //匹配指定范围内的任意单个字符
[^] //匹配指定范围外的任意单个字符
// ' . ' 任意单个字符
[root@localhost ~]# ls |grep '^.....$'
99.sh
// ' [] ' 匹配指定范围内的任意单个字符
[root@localhost tmp]# ls |grep '^[aceh]$'
a
c
e
h
[root@localhost tmp]# ls |grep '^[a-h]$'
a
b
c
d
e
f
g
h
[root@localhost tmp]# ls |grep '^[19-a]$'
1
9
a
中括号里面的^必须在放在最前面才表示取反
// [^] 匹配指定范围外的任意单个字符
[root@localhost tmp]# ls |grep '^[^1-9]$'
a
b
c
d
e
f
g
//匹配次数(贪婪模式)
-
//匹配其前面的任意单个字符任意次
.* //任意长度的任意字符
? //匹配其前面的任意单个字符1次或0次
+ //匹配其前面的任意单个字符至少1次
{m,n} //匹配其前面的任意单个字符至少m次,至多n次
* 匹配其前面的任意单个字符任意次
[root@localhost tmp]# ls |grep '^abc*bcd$'
abbcd
abcbcd
abccbcd
abccccbcd
abccccccbcd
.* 任意长度的任意字符
[root@localhost tmp]# ls |grep '^a.*$'
a
abbc
abbccc
abbcd
abc
abcbcd
abcc
abccbcd
abcccc
//匹配之后删除a开头的东西
[root@localhost tmp]# ls |grep '^a.*$' |xargs rm -f
[root@localhost tmp]#
\? 匹配其前面的任意单个字符1次或0次
[root@localhost tmp]# touch ab aa abc a
[root@localhost tmp]# ls |grep '^ab\?$'
a
ab
[root@localhost tmp]#
\+ 匹配其前面的任意单个字符至少1次
[root@localhost tmp]# ls |grep '^ab\+$'
ab
[root@localhost tmp]#
大括号必须转义 ’ / ’
\{m,n\} 匹配其前面的任意单个字符至少m次,至多n次
[root@localhost tmp]# ls |grep '^ab\+$'
ab
//至少一次
[root@localhost tmp]# ls |grep '^ab\{1,\}$'
ab
//一次到0次
[root@localhost tmp]# ls |grep '^ab\{0,1\}$'
a
ab
//就一次
[root@localhost tmp]# ls |grep '^ab\{1\}$'
ab
[root@localhost tmp]#
//位置锚定
^ //锚定行首,此字符后面的任意单个字符必须出现在行首
$ //锚定行尾,此字符前面的任意单个字符必须出现在行尾
^$ //空白行
<或\b //锚定词首,其后面的任意单个字符必须作为单词首部出现
>或\b //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
^$ 空白行
[root@localhost tmp]# vim a
hello world
hh
[root@localhost tmp]# grep '^$' a
//-v 取反
[root@localhost tmp]# grep -v '^$' a
hello world
hh
//词头
[root@localhost tmp]# grep '^hello' a
hello world tom jerry tuiqian
[root@localhost tmp]# grep '\<hello' a
hello world tom jerry tuiqian
[root@localhost tmp]# grep '\bhello' a
hello world tom jerry tuiqian
//词尾
[root@localhost tmp]# grep '\>hello' a
/分组
()
例:(ab)*
//后向引用
\1 //引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 //引用第二个左括号以及与之对应的右括号所包括的所有内容
//匹配整体的
[root@localhost tmp]# ls |grep '^\(ab\)*$'
ab
abab
ababab
[root@localhost ~]# echo 'hello world runtime' |sed 's/hello \(.*\) \(.*\)/hello \2 \1/'
hello runtime world
[root@localhost tmp]# vim a
hello world tom jerry tuiqian
cpdd hhhh
hh
[root@localhost tmp]# sed 's/hello \(.*\) \(.*\)/hello \2 \1/' a
hello tuiqian world tom jerry
cpdd hhhh
hh
[root@localhost tmp]#
扩展正则表达式
//字符匹配
. //匹配任意单个字符
[] //匹配指定范围内的任意单个字符
[^] //匹配指定范围外的任意单个字符
//次数匹配
* //匹配其前面的任意单个字符任意次
? //匹配其前面的任意单个字符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
[root@localhost tmp]# sed -r 's/hello (.*) (.*)/hello \2 \1/' a
hello tuiqian world tom jerry
cpdd hhhh
hh
[root@localhost tmp]#