14 Shell Script正则表达式

正则表达式

一、正则表达式介绍

​ 正则表达式是一个描述字符串集合的模式/规则

​ 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本、

​ 正则表达式由普通字符和元字符组成

​ 普通字符具有自身的字符意义

​ 元字符具有特殊意义

​ grep支持两种正则表达式:

​ 基本正则表达式

​ 扩展正则表达式

一)基本正则表达式

​ 元字符分类

​ 匹配操作符

​ 重复操作符

# 测试文本
[root@localhost ~]# cat test.txt 
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx

​ 匹配操作符

​ \ 转意操作符,恢复元字符原有的字面意义

[root@localhost ~]# grep '\$' test.txt                 
$ooxx

​ . 匹配任意单个字符

[root@localhost ~]# grep '..xx' test.txt 
ooxx12121212ooxx
ooxx 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx

​ [] []中包含一个字符序列来匹配单个字符

[root@localhost ~]# grep '[123]' test.txt
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx

​ ^ 匹配一行字符串的起始位置

[root@localhost ~]# grep '^ooxx' test.txt   
ooxx12121212ooxx
ooxx 12121212

​ $ 匹配一行字符串的结束位置

[root@localhost ~]# grep '\$' test.txt                 
$ooxx

​ \< 匹配一个单词的起始位置

[root@localhost ~]# grep 'ooxx\>' test.txt 
ooxx12121212ooxx
ooxx 12121212
1212 ooxx 1212
$ooxx

​ \> 匹配一个单词的结束位置

[root@localhost ~]# grep 'ooxx\<' test.txt

​ 重复操作符

​ * 重复前面的项零次或多次

[root@localhost ~]# grep 'o*x' test.txt 
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx

二)扩展正则表达式

​ 元字符分类

​ 匹配操作符

​ 重复操作符

​ 对于grep默认执行支持基本正则表达式,如果想使用扩展正则表达式需要使用\转义扩展正则表达式的元字符

[root@localhost ~]# cat test.txt 
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx

​ 匹配操作符

​ | 连接操作符:或

[root@localhost ~]# grep 'ooxx\|xxoo' test.txt
ooxx12121212ooxx
ooxx 12121212
1212 ooxx 1212
$ooxx

​ () 选择操作符

[root@localhost ~]# grep '\(12\)' test.txt
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212

​ \n 引用操作符

​ 重复操作符

​ ? 重复前面的项零次或一次

[root@localhost ~]# grep '\(12\)\?' test.txt
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx

​ + 重复前面的项一次或多次

[root@localhost ~]# grep '\(12\)\+' test.txt  
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212

​ {n} 重复前面的项n次

[root@localhost ~]# grep 'ooxx\{1\}' test.txt
ooxx12121212ooxx
ooxx 12121212
1212 ooxx 1212
$ooxx

​ {n,} 重复前面的项n次到多次

[root@localhost ~]# grep 'ooxx\{1,\}' test.txt
ooxx12121212ooxx
ooxx 12121212
1212 ooxx 1212
$ooxx

​ {n,m} 重复前面的项n次到m次

[root@localhost ~]# grep 'ooxx\{1,2\}' test.txt
ooxx12121212ooxx
ooxx 12121212
1212 ooxx 1212
$ooxx

三)正则表达式实战

​ 正则表达式匹配网址

grep -n '^http://www\.\abcd\.com$' url

​ 正则表达式匹配邮箱地址

# 找出所有合规的邮件地址
grep --color  '^[a-zA-Z0-9_]\+[.-]*@[a-zA-Z0-9]\+\.[a-zA-Z]\+'  email

# 找出所有不合规的邮件地址
grep -E '^[^a-zA-Z0-9_]*@' email

​ 正则表达式匹配IP地址

grep -E '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' ip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值