shell正则表达式

shell中的正则有两种类型的规则,基本类BRE与扩展类ERE,常见的命令支持与下

类型grepsedvi egrepawk
BRE***  
EREgrep -Esed -r **

一、字符类

字符支持类型含义
.(点)BRE/ERE匹配除换行符之外的任意1个字符
[]BRE/ERE匹配方括号中的任意1个字符
-BRE/ERE在[]中使用,表示字符范围如a-z,A-Z,0-9
^BRE/ERE

放在[]内的最开头,表示除方括号中的字符以外的所有字符(逻辑“非”)

如[^def]表示匹配不是d、e、f这三个字符的

\BRE/ERE

转义字符,关闭其后续字符的特殊意义,恢复其原意。

如表达式中.代表任意字符,\.则表示.本身

POSIX字符类

[[:xxx:]]

BRE/ERE

预定义的命名符号

[[:digit:]] 数字

[[:lower:]] 小写字母,相当于[a-z]

[[:upper:]] 大写字母,相当于[A-Z]

[[:space:]] 空白字符(新行,空格,制表符)
[[:alpha:]] 文字字符

[[:graph:]] 非空字符(非空格、控制字符)

[[:cntrl:]] 控制字符

[[:print:]] 可打印字符(包括空格)

[[:alnum:]] 文字及数字

[[:punct:]] 标点符号

[[:xdigit:]] 十六进制数字(0-9,a-f,A-F)

\wBRE/ERE匹配字母、数字字符和下划线,也就是[A-Za-z0-9_]
\WBRE/ERE匹配非字母、数字字符和下划线,也就是[^A-Za-z0-9_]

特殊字符类

(仅grep的perl

模式支持)

grep -P

\r 回车

\n 换行

\b 退格

\t 制表符

\v 垂直制表符

\f 分页符

\d 等价于 [0-9]

\D 等价于 [^0-9]

\s 非空白字符,等价于[^\f\n\r\t\v]

\S 空白字符,等价于[ \f\n\r\t\v]

二、数量限定符(注意两种模式的写法,BRE模式除*外均需转义)

字符支持类型含义
\? / ?BRE / ERE

紧接它前面的单元匹配0个或1个

** 不支持非贪婪模式 **

\+ / +BRE / ERE紧接它前面的单元匹配1个或多个
* / *BRE / ERE紧接它前面的单元匹配0个或多个
\{N\} / {N}BRE / ERE

紧接它前面的单元精确匹配N个

如 ab{2}表示匹配abab

\{N,\} / {N,}BRE / ERE

紧接它前面的单元精确匹配>=N个

如 a{2,}表示匹配aa……

\{,M\} / {,M}BRE / ERE

紧接它前面的单元精确匹配<=N个

如 a{,2}表示匹配……a或……aa

\{N,M\} / {N,M}BRE / ERE紧接它前面的单元精确匹配>=N个,并且<=M个

三、位置匹配符

符号支持类型含义示例
^BRE/ERE表示行首^[A-Z] 表示行首为大写字母
$BRE/ERE表示行尾

[a-z]$ 表示行尾为大写字母

^$ 表示匹配空行

^[[:space:]]*$ 表示匹配只有空格或tab的空白行

\<BRE/ERE表示单词的左侧\<a 表示以a开头的单词
\>BRE/ERE表示单词的右侧

be\>表示以be结尾的单词

\<grep\>匹配完整的单词grep

\bBRE/ERE表示单词的两侧

\ba <==> \<a,be\b <==> be\>

\bgrep\b <==>\<grep\>

\BBRE/ERE表示不是单词的两侧

\B[ef]表示不以e或f开头的单词

[ef]\B表示不以e或f结尾的单词

四、分组及引用

符号支持类型含义示例
无符号BRE/ERE表示连续

echo 'cabca'|grep 'abc' -c   ==>1

echo 'cabdca'|grep 'abc' -c  ==>0

\| / |BRE / ERE表示逻辑“或”

echo 'cabca'|egrep 'abc|abd' -c ==>1

echo 'cabda'|egrep 'abc|abd' -c ==>1

\1-\9 引用

模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,

此内容后面的模式中可以被引用;

\(\) / ()BRE / ERE分组符号脚本中可以用${BASH_REMATCH[n]}引用

五、修饰符

修饰符用在正则表达式结尾,例如:/dog/i,其中 “ i “ 就是修饰符,它代表的含义就是:匹配时不区分大小写,常见的修饰符:

g   全局匹配(即:一行上的每个出现,而不只是一行上的第一个出现)
s    把整个匹配串当作一行处理
m    多行匹配
i    忽略大小写
x    允许注释和空格的出现
U    非贪婪匹配

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值