在linux中,对资源进行选择的时候,通常都会使用到通配符(globbing)、基本正则表达式(Basic Regular Expression)或者扩展正则表达式(Extend Regular Expression),大家肯定都疑惑过,它们在使用时,为什么相同的元字符会表示不同的含义呢?答案其实很简单,在bash环境下是不支持正则表达式的,也就是说那些* + .等之类的都是通配符,而真正支持正则表达式的是grep、sed和awk这些工具。所以在我理解看来,它们貌似一样,都是用来匹配字符的。但在文本处理中,都是用正则表达式,比如像awk,sed,是针对文件的内容的;而通配符多用在bash环境下的find,ls,cp等命令中,是用来查找文件名的。
以下是自己总结的三者元字符的区别,空格表示此处无意义
分类 |
符号 |
globbing |
BRE |
ERE |
字符匹配 |
. |
单个字符 |
单个字符 |
|
字符匹配 |
? |
单个字符 |
||
字符匹配 |
* |
匹配任意长度字符 |
其前面的字符任意次 |
其前面的字符任意次 |
字符匹配 |
.* |
任意长度字符 |
任意长度字符 |
|
字符匹配 |
[] |
指定范围内任意字符 |
指定范围内任意字符 |
指定范围内任意字符 |
字符匹配 |
[^] |
指定范围外任意字符 |
指定范围外任意字符 |
指定范围外任意字符 |
字符匹配 |
[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次,格式{m} |
||
次数匹配 |
至多n次,格式\{0,n\} |
至多n次,格式{0,n} |
||
次数匹配 |
m次到n次,格式\{m,n\} |
m次到n次,格式{m,n} |
||
分组引用 |
\1,\2分组,格式\(\) |
\1,\2分组,格式() |
时间: 2024-10-26 08:14:27