正则表达式

正则表达式

正则表达式分类

正则表达式: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]# 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值