正则表达式

什么是正则表达式

正则表达式:REGEXP,REGular EXPression。
正则表达式分为两类:

Basic REGEXP(基本正则表达式)
Extended REGEXP(扩展正则表达式)

在这//元字符

.		 //匹配任意单个字符
[root@localhost tmp]# ls
1  2  3  4  5  6  7  8  9  a  abc  bcd  z  Z
[root@localhost tmp]# ls |grep '^.$'	
1
2
3
4
5
6
7
8
9
a
z
Z

//[]          //匹配指定范围内的任意单个字符
[root@localhost tmp]# ls
1    14  2   25  30  36  41  47  52  58  63  69  74  8   85  90  96   b    g  m  s  y
10   15  20  26  31  37  42  48  53  59  64  7   75  80  86  91  97   bcd  h  n  t  z
100  16  21  27  32  38  43  49  54  6   65  70  76  81  87  92  98   c    i  o  u  Z
11   17  22  28  33  39  44  5   55  60  66  71  77  82  88  93  99   d    j  p  v
12   18  23  29  34  4   45  50  56  61  67  72  78  83  89  94  a    e    k  q  w
13   19  24  3   35  40  46  51  57  62  68  73  79  84  9   95  abc  f    l  r  x
[root@localhost tmp]# ls |grep '^[1-3a-c]$'
1
2
3
a
b
c

[^]         //匹配指定范围外的任意单个字符
[root@localhost tmp]# ls |grep '^[^1-3a-c]$'	//除了1-3和a-c不匹配,其他的都匹配
4
5
6
7
8
9
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Z
[root@localhost tmp]#

//匹配次数(贪婪模式)

*           //匹配其前面的任意单个字符任意次
[root@localhost tmp]# ls |grep '^ab*$'
a
ab
abb
abbb
abbbb

.*          //任意长度的任意字符
[root@localhost tmp]# ls |grep '^ab.*$'
ab
abb
abbb
abbbb
abc

  \?          //匹配其前面的任意单个字符1次或0次
[root@localhost tmp]# ls |grep '^ab\?$'
a
ab
\+          //匹配其前面的任意单个字符至少1次
[root@localhost tmp]# ls |grep '^ab\+$'
ab
abb
abbb
abbbb

\{m,n\}     //匹配其前面的任意单个字符至少m次,至多n次
[root@localhost tmp]# ls |grep '^ab\{1,3\}$' //最少匹配1次,之多匹配3
此
ab
abb
abbb

//位置锚定

 ^           //锚定行首,此字符后面的任意单个字符必须出现在行首
[root@localhost tmp]# ls |grep '^a'
a
ab
abb
abbb
abbbb
abc

$           //锚定行尾,此字符前面的任意单个字符必须出现在行尾
[root@localhost tmp]# ls |grep 'b$'
ab
abb
abbb
abbbb
b

^$          //空白行
[root@localhost tmp]# cat a
hello adha kdak dhas askjdskad 


ad ad ad adadadbulaike
[root@localhost tmp]# grep ^$ a		//匹配空白行


[root@localhost tmp]# grep -v ^$ a		//-v取反,不匹配空白行
hello adha kdak dhas askjdskad 
ad ad ad adadadbulaike

\<或\b       //锚定词首,其后面的任意单个字符必须作为单词首部出现
\>或\b       //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
[root@localhost tmp]# cat a
hello adha kdak dhas askjdskad 


ad ad ad adadadbulaike
[root@localhost tmp]# grep '\<h' a
hello adha kdak dhas askjdskad 
[root@localhost tmp]# grep 'd\>' a
hello adha kdak dhas askjdskad 
ad ad ad adadadbulaike

/分组
    \(\)
    例:\(ab\)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
[root@192 tmp]# cat a
hello heipi hello bulaike hello nigger

hello runtime world
[root@192 tmp]# sed 's/hello \(.*\) \(.*\)/hello \2 \1/' a
hello nigger heipi hello bulaike hello

hello world runtime

扩展正则表达式

在这里插//字符匹配

//.       //匹配任意单个字符
[root@localhost tmp]# ls |egrep '^.$'
1
2
3
4
5
6
7
8
9
a
b

//[]      //匹配指定范围内的任意单个字符
[root@localhost tmp]# ls |egrep '^[15-9a-cz]$'
1
5
6
7
8
9
a
b
c
z

//[^]     //匹配指定范围外的任意单个字符
[root@localhost tmp]# ls |egrep '^[^15-9a-cz]$'
2
3
4
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
Z

//次数匹配

//*       //匹配其前面的任意单个字符任意次
[root@localhost tmp]# ls |egrep '^ab*$'
a
ab
abb
abbb
abbbb

//?       //匹配其前面的任意单个字符1次或0次
[root@localhost tmp]# ls |egrep '^ab?$'
a
ab

+       //匹配其前面的任意单个字符至少1次
[root@localhost tmp]# ls |egrep '^ab+$'
ab
abb
abbb
abbbb

// {m,n}   //匹配其前面的任意单个字符至少m次,至多n次
[root@localhost tmp]# ls |egrep '^ab{1,4}$'
ab
abb
abbb
abbbb

//位置锚定

//    ^       //锚定行首,此字符后面的任意单个字符必须出现在行首
[root@localhost tmp]# egrep '^hello' a
hello heipi hello bulaike hello nigger
hello runtime world

// $       //锚定行尾,此字符前面的任意单个字符必须出现在行尾
[root@localhost tmp]# cat a
hello heipi hello bulaike hello nigger

hello runtime world
[root@localhost tmp]# egrep 'world$' a
hello runtime world

// ^$      //空白行
[root@localhost tmp]# cat a
hello heipi hello bulaike hello nigger

hello runtime world
[root@localhost tmp]# egrep ^$ a		//匹配空白行

[root@localhost tmp]# egrep -v ^$ a		//不匹配空白行-v取反
hello heipi hello bulaike hello nigger
hello runtime world

// \<或\b       //锚定词首,其后面的任意单个字符必须作为单词首部出现
   
[root@localhost tmp]# cat a
hello heipi hello bulaike helloasdasd nigger

hello runtime world
[root@localhost tmp]# egrep '\bhello' a
hello heipi hello bulaike helloasdasd nigger
hello runtime world

\>或\b       //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
[root@localhost tmp]# cat a
hello heipi hello bulaike helloasdasdhello nigger

hello runtime world
[root@localhost tmp]# egrep 'hello\b' a
hello heipi hello bulaike helloasdasdhello nigger
hello runtime world

//分组
    ()      //分组
    \1,\2,\3,....
   例:(ab)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
[root@localhost tmp]# cat a
hello heipi hello bulaike helloasdasdhello nigger

hello runtime world
[root@localhost tmp]# sed -r 's/(hello) (.*) (.*)/\3 \1 \2/' a		//-r是支持扩展正则表达式的选项
nigger hello heipi hello bulaike helloasdasdhello

world hello runtime


第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
[root@localhost tmp]# cat a
hello heipi hello bulaike helloasdasdhello nigger

hello runtime world
[root@localhost tmp]# sed -r 's/(hello) (.*) (.*)/\3 \1 \2/' a		//-r是支持扩展正则表达式的选项
nigger hello heipi hello bulaike helloasdasdhello

world hello runtime

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值