globbing、ERE、BRE的比较

本文详细解析了Linux环境中通配符与基本及扩展正则表达式的区别,包括各自的应用场景与符号含义,有助于理解如何在不同工具中正确使用匹配模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在linux中,对资源进行选择的时候,通常都会使用到通配符(globbing)、基本正则表达式(Basic Regular Expression)或者扩展正则表达式(Extend Regular Expression),大家肯定都疑惑过,它们在使用时,为什么相同的元字符会表示不同的含义呢?答案其实很简单,在bash环境下是不支持正则表达式的,也就是说那些* + .等之类的都是通配符,而真正支持正则表达式的是grep、sed和awk这些工具。所以在我理解看来,它们貌似一样,都是用来匹配字符的。但在文本处理中,都是用正则表达式,比如像awk,sed,是针对文件的内容的;而通配符多用在bash环境下的find,ls,cp等命令中,是用来查找文件名的。

  以下是自己总结的三者匹配资源的区别,空格表示此处无意义


分类

符号

ERE

BRE

globbing(字符匹配)

字符匹配

.

单个字符

单个字符

 

字符匹配

?

  单个字符

字符匹配

*

其前面的字符任意次

其前面的字符任意次

任意长度任意字符

字符匹配

.*

任意长度任意字符

任意长度任意字符

 

字符匹配

[]

指定范围内任意一个字符

指定范围内任意一个字符

指定范围内任意一个字符

字符匹配

[^]   

指定范围外任意一个字符

指定范围外任意一个字符

指定范围外任意一个字符

字符匹配

[0-9]

任意一个数字

任意一个数字

任意一个数字

字符匹配

[a-z]

任意一个小写字母

任意一个小写字母

任意一个小写字母

字符匹配

[A-Z]

任意一个大写字母

任意一个大写字母

任意一个大写字母

字符匹配

[[:digit:]]

任意一个数字

任意一个数字

任意一个数字

字符匹配

[[:lower:]]

任意一个小写字母

任意一个小写字母

任意一个小写字母

字符匹配

[[:upper:]]

任意一个大写字母

任意一个大写字母

任意一个大写字母

字符匹配

[[:alpha:]]

任意一个字母

任意一个字母

任意一个字母

字符匹配

[[:alnum:]]

任意一个字母或数字

任意一个字母或数字

任意一个字母或数字

字符匹配

[[:space:]]

任意一个空格符

任意一个空格符

任意一个空格符

字符匹配

[[:punct:]]

任意一个标点符号

任意一个标点符号

任意一个标点符号

位置锚定

^

锚定行首

锚定行首

 

位置锚定

$

锚定行尾

锚定行尾

 

位置锚定

\<

锚定词首

锚定词首

 

位置锚定

\>

锚定词尾

锚定词尾

 

次数匹配

\??

前面的字符0次或1

前面的字符0次或1

 

次数匹配

\++

前面的字符至少1

前面的字符至少1

 

次数匹配

 

m次,格式\{m\}

m次,格式{m}

 

次数匹配

 

至少m次,格式\{m,\}

至少m次,格式{m}

 

次数匹配

 

至多n次,格式\{0,n\}

至多n次,格式{0,n}

 

次数匹配

 

m次到n次,格式\{m,n\}

m次到n次,格式{m,n}

 

分组引用

 

\1\2分组,格式\(\)

\1\2分组,格式()

 




注意

[root@centos7 tmp]# echo "123abc" | tr -d "[[:digit:]]"
abc
[root@centos7 tmp]# echo "123abc" | tr -d "[^[:digit:]]"
abc
[root@centos7 tmp]# echo "123a^bc" | tr -d "[^[:digit:]]"
abc

你看出什么了吗?

答案就是此处[^[:digit:]]并未被识别为数字以外的字符,你知道原因吗?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值