正则表达式与通配符有部分相似之处,但正则表达式更复杂也更强大。
通配符用于(完全)匹配文件名,支持通配符的命令有:ls、find、cp等;
正则表达式用于在文件中(包含)匹配字符串,支持的命令有:grep、awk、sed等。
正则表达式元字符
正则表达式由正则表达式元字符组成,而元字符又分为基本正则表达式元字符和扩展正则表达式元字符,两者基本相同,有少许差异。
基本正则表达式元字符
元字符 | 作用 |
---|---|
|转义符 | |
匹配字符 |
|
. | 匹配除换行符外任意一个字符 |
[ ] | 匹配[ ]中任意一个字符,如[0-9]、[:punct:]、[:space:] |
[ ^ ] | 匹配[ ]中字符以外的任意字符 |
匹配次数 |
|
* | 匹配前一个字符0次或多次,如:.* 匹配任意长度任意字符 |
\? | 匹配前一个字符0次或1次 |
\+ | 匹配前一个字符1次或多次 |
\ | 表示前面的字符匹配n次,如[1][3-8][0-9]\{9\}表示手机号 |
\ | 前面的字符至少出现n次,如[:digit:]\{6,\}表示6位以上数字 |
\ | 前面的字符出现n-m次,如[:alpha:]\{6,8\}表示6-8位字母 |
位置锚定 |
|
^ | 匹配行首,如^hello匹配以hello开头的行 |
$ | 匹配行尾,如$:空白行,[:space:]*$:空(白)行 |
\< 或 \b | 匹配词首 |
\> 或 \b | 匹配词尾 |
\<模式\> | 匹配完整单词(非特殊字符组成的连续字符),支持模式 |
分组与引用 |
|
\(模式\) | 将1个或多个字符当作一个整体处理,支持模式 |
\n | 第n组括号之间的模式(即分组)所匹配到的字符 |
扩展正则表达式元字符
元字符 | 作用 |
---|---|
|转义符 | |
匹配字符 |
|
. | 匹配除换行符外任意一个字符 |
[ ] | 匹配[ ]中任意一个字符,如[0-9]、[:punct:]、[:space:] |
[ ^ ] | 匹配[ ]中字符以外的任意字符 |
匹配次数 |
|
* | 匹配前一个字符0次或多次,如:.* 匹配任意长度任意字符 |
? | 匹配前一个字符0次或1次 |
+ | 匹配前一个字符1次或多次 |
表示前面的字符匹配n次,如[1][3-8][0-9]\{9\}表示手机号 | |
前面的字符至少出现n次,如[:digit:]\{6,\}表示6位以上数字 | |
前面的字符出现n-m次,如[:alpha:]\{6,8\}表示6-8位字母 | |
位置锚定 |
|
^ | 匹配行首,如^hello匹配以hello开头的行 |
$ | 匹配行尾,如$:空白行,[:space:]*$:空(白)行 |
\< 或 \b | 匹配词首 |
\> 或 \b | 匹配词尾 |
\<模式\> | 匹配完整单词(非特殊字符组成的连续字符),支持模式 |
分组与引用 |
|
(模式) | 将1个或多个字符当作一个整体处理,支持模式 |
\n | 第n组括号之间的模式(即分组)所匹配到的字符 |
或 |
|
a | b |