每天三分钟搞定linux shell脚本(58) 正则来了!!!ERE模式

ERE模式

在这里插入图片描述

ERE模式比BRE能支持更多的操作,当前sed不支持ERE,gawk支持ERE

1 问号

之前介绍了点号匹配1次星号匹配0次或多次,而问号是匹配0次或1次
比如文件data4的内容为:

abc
abbc
ac
a

输入:

gawk '/ab?c/{print $0}' data4

运行结果为:

abc
ac

可以看出abbc没有匹配上,同样,这里也可以使用BRE中的一些规则,比如使用方括号指定范围,输入:

gawk '/a[a-c]?c/{print $0}' data4

运行结果为:

abc
ac

2 加号

问号匹配0次或1次,而加号匹配1次或多次。比如文本data4的内容为:

abc
abbc
ac
a

输入:

gawk '/ab+c/{print $0}' data4

运行后结果为:

abc
abbc

3 花括号

花括号用于限定字符出现的个数,有两种用法:
{m}表示前面的字符出现m次;
{m,n}表示前面的字符出现次数大于m次小于等于n次
{m,} 紧跟在它前面的单元应匹配至少m次
{,n} 紧跟在它前面的单元应匹配最多n次

比如文件data6的内容为:

ac
abc
abbc
abbbc

输入:

gawk '/ab{1,2}c/{print $0}' data6

运行后结果为

abc
abbc

4 OR操作

使用单竖线(管道符号),可以实现或的操作,也就是竖线左右两侧只要有一个匹配成功则输出,比如输入:

echo "zhao ben shan"|gawk '/b[a-z]+n|dan/{print $0}'

运行结果为:

zhao ben shan

注意上面的左右两侧的模式也是可以使用正则表达式。

5 小括号变零为整

正则表达式中可以使用小括号包起来一些字符或者其他正则表达式,小括号的内容可以看成一个整体。比如文本data7的内容为:

January
Jan

输入

 gawk '/Jan(uary)?/{print $0}' data7

运行结果为:

January
Jan

这里表示uary这个整体可能出现0次或者1次。
还有一种非常常用的用法,把小括号和管道符号联合使用,用于匹配模式的组合,比如有文件data8内容为:

abc
dbc
abf
dbf
def

输入:

gawk '/(a|d)b(c|f)/{print $0}' data8

运行后结果为:

abc
dbc
abf
dbf

小括号里面的字符随意选择一个即可匹配成功。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涤除而玄览

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值