正则表达式
- 正则表达式类型全景图
- 正则表达式类型对比表
- 基础元素字符表
- 一、基础正则表达式(BRE)
- 1. 文件内容匹配(grep)
- 2. 文本替换(sed)
- 二、扩展正则表达式(ERE)
- 1. 多条件匹配(grep -E)
- 2. 分组提取(awk)
- 三、高级模式匹配
- 高级元字符
- 1. 零宽断言(匹配但不捕获)
- 2. 非贪婪匹配
- 四、实战应用场景
- 1. 日志错误提取
- 2. 配置文件解析
- 3. 数据验证
- 命令总结表格
- 功能作用详解
- 1. 正则表达式类型对比
- 2. 核心元字符速查
- 3. 分组与捕获
- 4. 实战技巧
正则表达式类型全景图
正则表达式类型对比表
特性 | BRE | ERE | PCRE | 适用场景 |
---|
元字符转义 | 需转义+?{}() | 无需转义 | 无需转义 | 复杂模式 |
量词支持 | * \+ \? \{n,m\} | * + ? {n,m} | * + ? {n,m} | 重复匹配 |
逻辑或 | ` | ` | ` | ` |
分组捕获 | $ $ | () | () | 提取子串 |
零宽断言 | 不支持 | 不支持 | 支持 | 边界匹配 |
非贪婪匹配 | 不支持 | 不支持 | *? +? | HTML/XML解析 |
性能 | 高 | 中 | 低 | 大文件处理 |
基础元素字符表
元字符 | 功能 | 示例 | 匹配结果 |
---|
. | 匹配任意字符 | a.c | “abc”, “adc” |
^ | 行首锚定 | ^start | “start line” |
$ | 行尾锚定 | end$ | “line end” |
* | 0次或多次 | ab*c | “ac”, “abbc” |
+ | 1次或多次 | ab+c | “abc”, “abbc” |
? | 0次或1次 | ab?c | “ac”, “abc” |
[] | 字符组 | [aeiou] | “a”, “e” |
[^] | 排除字符 | [^0-9] | “a”, “B” |
` | ` | 或操作 | `cat |
() | 分组捕获 | (abc)+ | “abc”, “abcabc” |
一、基础正则表达式(BRE)
1. 文件内容匹配(grep)
[root@localhost ~]
apple
banana
cherry
12345
test@example.com
EOF
[root@localhost ~]
12345
[root@localhost ~]
test@example.com
2. 文本替换(sed)
[root@localhost ~]
apple
banana
cherry
test@example.com
[root@localhost ~]
apple
banana
cherry
12345
test@example.com
二、扩展正则表达式(ERE)
1. 多条件匹配(grep -E)
[root@localhost ~]
apple
banana
cherry
test@example.com
[root@localhost ~]
12345
2. 分组提取(awk)
[root@localhost ~]
用户:test 域名:example
三、高级模式匹配
高级元字符
元字符 | 功能 | 示例 | 匹配结果 |
---|
\d | 数字 | \d{3} | “123” |
\w | 单词字符 | \w+ | “word” |
\s | 空白字符 | \s+ | " ", “\t” |
\b | 单词边界 | \bword\b | “word” |
(?=) | 正向预查 | Windows(?=10) | “Windows” in “Windows10” |
(? | 负向预查 | Windows(?!7) | “Windows” not in “Windows7” |
*? | 非贪婪匹配 | <div>.*?</div> | 最短匹配 |
1. 零宽断言(匹配但不捕获)
[root@localhost ~]
test@example.com
2. 非贪婪匹配
[root@localhost ~]
[root@localhost ~]
<div>content</div>
四、实战应用场景
1. 日志错误提取
[root@localhost ~]
INFO: User login
ERROR: Database connection failed
WARN: Disk space low
ERROR: File not found
EOF
[root@localhost ~]
Database connection failed
File not found
2. 配置文件解析
[root@localhost ~]
server {listen 80;server_name localhost;
}
server {listen 443 ssl;server_name example.com;
}
EOF[root@localhost ~]
80
443
3. 数据验证
[root@localhost ~]
[root@localhost ~]
> echo "有效IP"
> else
> echo "无效IP"
> fi
有效IP
命令总结表格
演示命令 | 功能描述 | 关键选项/语法 |
---|
grep '[0-9]\+' file | BRE数字匹配 | \+ 一次或多次 |
`grep -E 'pattern1 | pattern2’` | ERE多条件匹配 |
sed 's/old/new/g' | 文本替换 | s///g 全局替换 |
awk '/pattern/{print $0}' | 模式过滤 | /regex/ 匹配行 |
grep -P 'regex' | Perl兼容正则 | -P 支持高级特性 |
[[ $var =~ regex ]] | 条件判断 | =~ 正则匹配 |
功能作用详解
1. 正则表达式类型对比
类型 | 命令选项 | 支持特性 | 典型场景 |
---|
BRE (基本正则) | grep | . * [ ] ^ $ | 简单匹配、基础文本处理 |
ERE (扩展正则) | grep -E | `+ ? | () {}` |
PCRE (Perl兼容) | grep -P | 零宽断言、非贪婪匹配 | 高级文本提取、日志分析 |
2. 核心元字符速查
元字符 | BRE/ERE | PCRE | 功能描述 |
---|
. | ✓ | ✓ | 匹配任意单个字符(除换行) |
* | ✓ | ✓ | 前项匹配0次或多次 |
+ | \+ (BRE) / + (ERE) | ✓ | 前项匹配1次或多次 |
? | \? (BRE) / ? (ERE) | ✓ | 前项匹配0或1次 |
{n,m} | \{n,m\} (BRE) / {n,m} (ERE) | ✓ | 匹配n到m次 |
` | ` | | (BRE) / ` | ` (ERE) |
^ / $ | ✓ | ✓ | 行首/行尾锚定 |
\b | ✗ | ✓ | 单词边界 |
(?=) | ✗ | ✓ | 正向零宽断言 |
3. 分组与捕获
echo "2025-07-28" | grep -Po '(\d{4})-(\d{2})-(\d{2})'
echo "hello world" | sed 's/$hello$ $world$/\2 \1/'
4. 实战技巧
日志分析
grep -Po 'HTTP/1.\d" \K[0-9]{3}' access.log
awk '/ERROR/{match($0, /ERROR: (.+)/, arr); print arr[1]}' app.log | sort | uniq -c
数据清洗
echo "Phone: (123) 456-7890" | sed 's/[^0-9]//g'
echo "28/07/2025" | sed -E 's#([0-9]{2})/([0-9]{2})/([0-9]{4})#\3-\2-\1#'
配置管理
sed -i 's/192\.168\.1\.[0-9]\+/10.0.0.1/g' *.conf
grep -hoE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' /etc/passwd