Linux-通配符与正则
特殊符号
root:用户名
@:at
localhost:主机名
$:普通用户标识
/:表示根目录
;:表示并列执行
``:优先执行(相当于数学计算中小括号)
通配符
- ~:表示的家目录
- #:表示的是注释
- *:表示任意
- ?:表示任意一个符号
- {}:表示序列(可以是数字序列,也可用是字母序列)
- >:清空输出重定向(1表示正确输出重定向,2表示错误输出重定向,&表示无论正确错误都重定向)
- >>:追加输出重定向(1表示正确输出重定向,2表示错误输出重定向,& 无论正确错误都重定向)
- <:标准输入重定向
- <<:标准输入追加重定向
- .:当前路径
- ..:上一级路径
- |:管道符(将管道符左侧命令的执行结果传递到管道符右侧的末尾)
- &&:表示前面命令执行成功,才执行后面的命令
- ||:表示或者,前面的命令失败时才执行后面的命令
- !:表示取反
- &: 并且
正则表达式
分类
| 工具 | 默认支持的正则类型 | 扩展正则启用方法 |
|---|---|---|
| grep | 基本正则(BRE) | grep -E 或 egrep |
| sed | 基本正则(BRE) | sed -E(GNU)或 sed -r |
| awk | 扩展正则(ERE) | 默认支持,无需额外选项 |
基本元字符
| 元字符 | 作用 | 示例 |
|---|---|---|
^ | 匹配行首 | ^admin |
$ | 匹配行尾 | error$ |
^$ | 匹配空行 | ^$ |
. | 匹配任意单个字符 | a.c → abc, a1c |
* | 匹配前一个字符0次到无限次 | go*d → gd, good |
\ | 转义符 | \.,\*,\\ |
+ | 匹配前一个字符1次到无限次 | go+d → god, gooood |
? | 匹配前一个字符 0或1 次 | colou?r → color/colour |
[] | 匹配中括号中的任意一个字符 | [aeiou] → 匹配元音字母 |
[^] | 取反,不匹配中括号内的字符 | [^0-9] → 非数字字符 |
^[] | 以中括号内任意字符开头 | ^[abc] |
| ` | ` | 逻辑或(扩展正则) |
.* | 表示任意 | .* |
.*? | 转为懒惰(尽可能少),匹配到第一个满足条件 | .*? |
{n} | 精确匹配 n 次(扩展正则) | a{3} → aaa |
{n,} | 至少匹配 n 次(扩展正则) | a{2,} → aa, aaa… |
{,n} | 匹配前一个字符0次到n次(扩展正则) | |
{n,m} | 匹配前一个字符n次到m次(扩展正则) | a{2,4} → aa, aaa, aaaa |
() | 用于分组,可以将多个字符作为一个整体进行匹配 | (abc) |
转义字符
| 字符 | 功能描述 | 示例数据 | 适用场景 |
|---|---|---|---|
\. | 匹配字符 . | \. | 匹配字符 .,如 a.b 中的 .。 |
\* | 匹配字符 * | \* | 匹配字符 *,如 a* 中的 *。 |
\+ | 匹配字符 + | \+ | 匹配字符 +,如 a+ 中的 +。 |
\? | 匹配字符 ? | \? | 匹配字符 ?,如 a? 中的 ?。 |
$ | 匹配字符 ( | $ | 匹配字符 (,如 (abc) 中的 (。 |
$ | 匹配字符 ) | $ | 匹配字符 ),如 (abc) 中的 )。 |
$$ | 匹配字符 [ | $$ | 匹配字符 [,如 [abc] 中的 [。 |
$$ | 匹配字符 ] | $$ | 匹配字符 ],如 [abc] 中的 ]。 |
\{ | 匹配字符 { | \{ | 匹配字符 {,如 {abc} 中的 {。 |
\} | 匹配字符 } | \} | 匹配字符 },如 {abc} 中的 }。 |
\^ | 匹配字符 ^ | \^ | 匹配字符 ^,如 ^abc 中的 ^。 |
\$ | 匹配字符 $ | \$ | 匹配字符 $,如 abc$ 中的 $。 |
| ` | ` | 匹配字符 ` | ` |
预定义字符类
| 字符 | 功能描述 | 示例数据 | 适用场景 |
|---|---|---|---|
\d | 匹配任意一个数字字符 | \d | 匹配任意一个数字,如 0、1、9 等。 |
\D | 匹配任意一个非数字字符 | \D | 匹配任意一个非数字字符,如 a、b、_ 等。 |
\w | 匹配任意一个字母、数字或下划线字符 | \w | 匹配任意一个字母、数字或下划线,如 a、1、_ 等。 |
\W | 匹配任意一个非字母、数字或下划线字符 | \W | 匹配任意一个非字母、数字或下划线字符,如 !、@、# 等。 |
\s | 匹配任意一个空白字符 | \s | 匹配任意一个空白字符,如空格、制表符、换行符等。 |
\S | 匹配任意一个非空白字符 | \S | 匹配任意一个非空白字符,如 a、1、_ 等。 |
贪婪与懒惰匹配
| 字符 | 功能描述 | 示例数据 | 适用场景 |
|---|---|---|---|
*? | 懒惰匹配前面的字符零次或多次 | a*? | 懒惰匹配前面的字符零次或多次,如 a*? 匹配 a 时只匹配一个 a。 |
+? | 懒惰匹配前面的字符一次或多次 | a+? | 懒惰匹配前面的字符一次或多次,如 a+? 匹配 aa 时只匹配一个 a。 |
?? | 懒惰匹配前面的字符零次或一次 | a?? | 懒惰匹配前面的字符零次或一次,如 a?? 匹配 aa 时只匹配一个 a。 |
{n,}? | 懒惰匹配前面的字符至少 n 次 | a{2,}? | 懒惰匹配前面的字符至少 n 次,如 a{2,}? 匹配 aaa 时只匹配 aa。 |
{n,m}? | 懒惰匹配前面的字符至少 n 次,至多 m 次 | a{2,4}? | 懒惰匹配前面的字符至少 n 次,至多 m 次,如 a{2,4}? 匹配 aaaa 时只匹配 aa。 |
工具差异与注意事项
| 工具/语法 | 转义规则特点 | 示例对比 |
|---|---|---|
| BRE(基础正则) | 需转义 +、?、` | 、{}` 等扩展元字符 |
| ERE(扩展正则) | 直接支持 +、?、` | `,无需转义 |
| PCRE(Perl兼容) | 支持零宽断言、命名分组等高级功能 | grep -P '\d+(?=元)' → 匹配数字后接 "元" |
| Shell 引号处理 | 单引号 '' 避免变量扩展,双引号 "" 需二次转义 | grep "\\bword\\b" → 双引号需转义 \ |
