186 lines
2.7 KiB
Markdown
186 lines
2.7 KiB
Markdown
## 1、正则表达式概览
|
||
|
||
正则表达式(Regular Expression)用于描述一类字符串匹配规则,在 Linux 中常与 `grep`、`sed`、`awk` 等命令搭配使用。
|
||
|
||
常见场景:
|
||
|
||
- 匹配日志中的特定格式
|
||
- 过滤 IP、端口、用户名等文本
|
||
- 批量替换字符串
|
||
- 校验输入格式
|
||
|
||
## 2、基本字符匹配
|
||
|
||
### 2.1 `.`
|
||
|
||
- `.`:匹配任意单个字符
|
||
|
||
示例:
|
||
|
||
```shell
|
||
a.c
|
||
```
|
||
|
||
可以匹配:`abc`、`a1c`、`a-c`
|
||
|
||
### 2.2 `[]`
|
||
|
||
- `[]`:匹配指定范围中的任意单个字符
|
||
|
||
示例:
|
||
|
||
```shell
|
||
[0-9]
|
||
[a-z]
|
||
[A-Z]
|
||
```
|
||
|
||
### 2.3 `[^]`
|
||
|
||
- `[^...]`:匹配不在指定范围内的任意单个字符
|
||
|
||
示例:
|
||
|
||
```shell
|
||
[^0-9]
|
||
```
|
||
|
||
表示匹配任意一个非数字字符。
|
||
|
||
## 3、匹配次数
|
||
|
||
### 3.1 `*`
|
||
|
||
- `*`:匹配前一个字符 **0 次或多次**
|
||
|
||
示例:
|
||
|
||
```shell
|
||
ab*c
|
||
```
|
||
|
||
可以匹配:`ac`、`abc`、`abbc`
|
||
|
||
### 3.2 `.*`
|
||
|
||
- `.*`:匹配任意长度的任意字符
|
||
|
||
这个组合在日志处理里非常常见。
|
||
|
||
### 3.3 `?`
|
||
|
||
在基本正则中通常写作 `\?`,表示:
|
||
|
||
- 前一个字符 **0 次或 1 次**
|
||
|
||
### 3.4 `+`
|
||
|
||
在基本正则中通常写作 `\+`,表示:
|
||
|
||
- 前一个字符 **至少 1 次**
|
||
|
||
### 3.5 `{}`
|
||
|
||
在基本正则中通常写作转义形式:
|
||
|
||
- `\{n\}`:前一个字符恰好出现 `n` 次
|
||
- `\{m,n\}`:前一个字符出现 `m` 到 `n` 次
|
||
- `\{,n\}`:前一个字符最多出现 `n` 次
|
||
- `\{n,\}`:前一个字符至少出现 `n` 次
|
||
|
||
## 4、位置锚定
|
||
|
||
- `^`:行首
|
||
- `$`:行尾
|
||
- `^$`:空行
|
||
|
||
示例:
|
||
|
||
```shell
|
||
^root
|
||
```
|
||
|
||
表示匹配以 `root` 开头的行。
|
||
|
||
```shell
|
||
bash$
|
||
```
|
||
|
||
表示匹配以 `bash` 结尾的行。
|
||
|
||
## 5、分组与或关系
|
||
|
||
### 5.1 `\|`
|
||
|
||
在基本正则中,`\|` 表示“或者”。
|
||
|
||
示例:
|
||
|
||
```shell
|
||
root\|admin
|
||
```
|
||
|
||
表示匹配 `root` 或 `admin`。
|
||
|
||
### 5.2 `()`
|
||
|
||
在扩展正则中,分组通常使用 `()`;在部分基本正则工具中可能需要转义。
|
||
|
||
## 6、基本正则与扩展正则
|
||
|
||
### 6.1 基本正则 BRE
|
||
|
||
常见于:
|
||
|
||
- 默认 `grep`
|
||
- 默认 `sed`
|
||
|
||
其中 `?`、`+`、`{}`、`|` 往往要写成转义形式。
|
||
|
||
### 6.2 扩展正则 ERE
|
||
|
||
常见于:
|
||
|
||
- `grep -E`
|
||
- `egrep`
|
||
- `sed -r`
|
||
|
||
扩展正则写法更自然,例如:
|
||
|
||
```shell
|
||
grep -E 'root|admin' file.txt
|
||
```
|
||
|
||
## 7、常见示例
|
||
|
||
### 7.1 匹配空行
|
||
|
||
```shell
|
||
grep '^$' file.txt
|
||
```
|
||
|
||
### 7.2 匹配注释行
|
||
|
||
```shell
|
||
grep '^#' file.txt
|
||
```
|
||
|
||
### 7.3 匹配数字
|
||
|
||
```shell
|
||
grep '[0-9]' file.txt
|
||
```
|
||
|
||
### 7.4 匹配以 `.log` 结尾的文件名
|
||
|
||
```shell
|
||
grep '\.log$' file.txt
|
||
```
|
||
|
||
## 8、小结
|
||
|
||
- 正则表达式用于描述字符串匹配规则
|
||
- `.`、`[]`、`*`、`^`、`$` 是最基础也是最高频的元字符
|
||
- BRE 和 ERE 的主要区别在于部分符号是否需要转义
|
||
- 学会正则后,`grep`、`sed`、`awk` 的能力会明显提升
|