【shell】正则表达式

语法老是有几点忘记,但是正则又很重要,花时间记一下。

首先看一下通用的正则表达式规范,大概如下:

1.位置相关

这里的位置指的是从哪里开始匹配正则表达式,如果不指定,可以从任意位置开始或者结束。

$:从行末开始匹配;

^:从行首开始匹配;

 

2.标识符

是正则表达式最最基本的元素。包括:

2.1 任意字符比如A,a等等;

2.2 .

点号表示任意字符,这个必须特殊记忆,如果我们相匹配真正的点号,需要转义;

2.3 []

在中括号中指定,可以是范围也可以是枚举。注意不要与{}混淆,{}是指重复次数,后面会说;

2.4 [^]匹配不在中括号内的任意字符,也可以是范围或者枚举;

 

3.数量修饰符

3.1 ?

表示0次或1次;

3.2 +

表示一次或多次;

3.3 *

表示0次或多次;

3.4 {m}

表示重复m次;

3.5 {m,n}

至少m,至多n;

3.6 {m,}

至少m次;

 

4.一些特殊字符

4.1()

表示分组;

4.2 \

转义,之前介绍的字符如果使用原本含义都需要转义;

4.3 |

或者

 

但是在shell中,你会发现有时候直接用正则表达式会失效,这是因为正则表达式有不同的版本。不同的平台有不同的实现,单就shell来说,有两种,basic regular expresssion和extended regular expression。分别简称BRE和ERE吧。

shell里不同的命令对RE的支持也不同。

比方说最常见的,sed命令只支持BRE,而awk命令则支持ERE,egrep支持ERE而grep只支持BRE,等等。这些在使用的时候需要注意下。

BRE和ERE的区别:

1)BRE不支持{}()+?六个字符,也就是说直接在BRE里写这六个字符会被当做本身的含义而非前面介绍的特殊的含义。如果要使用特殊含义,必须加转义符。举个例子:[a-z]\{10\}才表示小写字母重复10次;

2)ERE是直接支持这六个字符的,默认是特殊含义,想要使用本身的含义才需要转义。

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值