shell编程之正则表达式

正则表达式介绍

正则表达式: 是一组特殊符号,通过这些符号可以根据需要匹配内容的格式生成一个公式

作用: 用这个公式将想要的内容全部匹配出来

shell下能使用正则表达式的命令有grepsedawkvimfind

限定符

第一套字符

定位符

定位符使用技巧: 同时锚定开头和结尾,做精确匹配;单一锚定开头或结尾,做模糊匹配

定位符描述
^锚定开头;如:^a,表示以a开头。默认锚定一个字符
$锚定结尾;如:a$,表示以a结尾。默认锚定一个字符

演示:

[root@server ~]# egrep "^a" re.sh		=>	"匹配以a开头的字符"
	a.
	a
	ac
	ab
	ac
	abb
	abc
	aab
	aac
	a_b
	acc
	aac

[root@server ~]# egrep "^a$" re.sh		=>	"匹配单一a字符"
	a

[root@server ~]# egrep "^ab" re.sh		=>	"匹配以a开头,第二个是b的字符"
	ab
	abb
	abc

[root@server ~]# egrep "^ab$" re.sh		=>	"匹配a开通,b结尾的字符"
	ab

[root@server ~]# egrep "a$" re.sh		=>	"匹配a结尾的字符"
	a
	*a
	bba
	b_a
	bca
	bba

[root@server ~]# egrep -n "^$" re.sh	=>	"匹配空行"
	3:
	8:

匹配符

匹配符描述
.匹配除回车以外任意一个字符
()字符串分组。多个字符括起来指定。注意:不能做范围选择,即不能(a-z)这样
[]定义字符类,只能匹配一个字符。通过[]定义一个范围的字节匹配,可以用[0-9a-zA-Z]表示
[^]否定括号中字符类出现的字符。取反的意思
\转义字符
|或。必须与()配合使用

演示:

.

[root@server ~]# egrep  "^a." re.sh		=>	"匹配a开通且至少两个字符"
	a.
	ac
	ab
	ac
	abb
	abc
	aab
	aac
	a_b
	acc
	aac
[root@server ~]# egrep  "^a.b" re.sh	=>	"a-头,2-任意,3-b的字符"
	abb
	aab
	a_b
[root@server ~]# egrep  "^.b" re.sh		=>	"任意-头,2-b的字符"
	ab
	abb
	abc
	bba
	bba

()

[root@server ~]# egrep  "^(ab)" re.sh		=>	"ab-头"
	ab
	ab
	abb
	abc
[root@server ~]# egrep  "^(ab)." re.sh		=>	"ab-头,3任意"
	abb
	abc
[root@server ~]# egrep  "^(abc)" re.sh		=>	"abc-头"
	abc

[]

[root@server ~]# egrep  "^a[0-9a-zA-Z]b" re.sh		=>	"a-头,2-(0到9、a到z、A到Z任意一个),3-b"
	abb
	aab
	a8b
[root@server ~]# egrep  "^a[0-9a-zA-Z]." re.sh		=>	"a-头,2-(0到9、a到z、A到Z任意一个),3-任意"
	abb
	abc
	aab
	aac
	acc
	aac
	aBc
	a333c
	a8b
	a6a
[root@server ~]# egrep  "^a[0-9a-zA-Z]c" re.sh		=>	"a-头,a-头,2-(0到9、a到z、A到Z任意一个),3-c"
	abc
	aac
	acc
	aac
	aBc
[root@server ~]# egrep  "^[a,b\*]" re.sh		=>	"以a或b或\或*开头"
	a.
	b*
	a
	aab
	*a
	bba
	a6a
	a\b\c
	b
	a*b
	\ab

[^]

[root@server ~]# egrep  "^a[0-9]." re.sh
	a333c
	a8b
	a6a
[root@server ~]# egrep  "^a[^0-9]." re.sh		=>	"a-头,2-不是数字0到9"
	abb
	abc
	aab
	aac
	a_b
	acc
	aac
	aBc
[root@server ~]# egrep  "^a[^0-9a-z]." re.sh	=>	"a-头,2-不是数字也不是小写字符"
	a_b
	aBc

\

[root@server ~]# egrep  "^a*" re.sh
	a.
	b*
	
	a
	ac
	ab
	ac
	ab
	abb
	abc
	aab
	*a
	bba
	aac
	b_a
	a_b
	b_c
	acc
	bca
	bba
	aac
	aBc
	a333c
	a8b
	a6a
	a\b\c
	
	a\b
	a*b
[root@server ~]# egrep  "^a\*" re.sh	=>	"转义星号,将其转义成字符串"
	a*b
[root@server ~]# egrep  "^a\." re.sh	=>	"转义.  将其转义成字符串,而不是匹配任意字符"
	a.

|

[root@server ~]# egrep  "^(b|c)b" re.sh		=>	"b或c-头,2-b"
	bba
	bba
[root@server ~]# egrep  "^(b|c)a" re.sh		=>	"a或c-头,2-a"
	ca
	cab
	cac

限定符字符

限定符: 对前面的字符或者字符串出现的次数做限定说明

限定符描述
*某个字符或字符串之后加星号,如:ca* 表示a可以出现0次或多次
?与星号类似,如:cb? 表示b可以出现0次或1次
+与星号类似,如:ac+ 表示c出现1次或多次,c字符至少出现1次
{n,m}某个字符或字符串之后加上,如:ba{n,m} 表示a字符最少出现n次、最多出现m次
{m}与{n,m}类似,但是表示正好出现m次;如:bc{m} 表示c字符正好出现3次
.*点星组合代表匹配除回车以外所有字符,匹配0次到多次。

演示:

{n,m}

[root@server ~]# egrep  "^ab{3,5}c" re.sh	=>	"a-头,2-(b出现3到5次),b后面必须跟c字符"
	abbbc
	abbbbc
	abbbbc
	abbbbbc
	abbbbbca
	abbbbc
	abbbcabbc
	abbbc
[root@server ~]# egrep  "^ab{4,7}a" re.sh		=>	"a-头,2-(b出现4到7次),b后面必须跟a字符"
	abbbbbba

[root@server ~]# egrep  "^(ab){2,4}" re.sh		=>	"ab字符串最少出现2次,最多出现4次"
	ababababababab
	ababababab
	abababababa

{m}

[root@server ~]# egrep  "^ab{5}c" re.sh		=>	"b必须出现五次,且后面跟c字符"
	abbbbbc
	abbbbbca
[root@server ~]# egrep  "^ab{5}" re.sh		=>	"b必须出现五次,后面出现字符随意"
	abbbbbbc
	abbbbbbc
	abbbbbc
	abbbbbca
	abbbbbba
	abbbbb
	
[root@server ~]# egrep  "^(ab){7}$" re.sh		=>	"表示ab开头,出现七次,必须ab结尾"
	ababababababab

第二套

POSIX 字符

posix字符用于匹配一个范围,一次匹配一个字符

注意[[]] 第一个中括号是匹配符[],第二个中括号为POSIX字符。如:[[:digit:]]表示匹配0-9范围内字符一次

特殊字符描述
[:alnum:]匹任意数字和字母字符,如:0-9、a-z、A-Z
[:alpha:]任意字母,大写或小写
[:digit:]数字 0-9
[:graph:]非空字符 (非空格控制字符)
[:lower:]小写字母 a-z
[:upper:]大写字母 A-Z
[:cntrl:]控制字符
[:print:]非空字符(包括空格)
[:punct:]标点符号
[:blank:]空格和TAB字符
[:xdigit:]十六进制数字
[:space:]所有空白字符(新行、空格、制表符)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值