Lazy loaded image
Shell 正则匹配操作符 =~ 详解
字数 1759阅读时长 5 分钟
2025-11-27
2025-11-29
type
status
date
slug
summary
tags
category
icon
password
菜单级别
Place
Verification
Owner
在 Shell 脚本中,=~ 是一个强大的二元操作符,用于正则表达式匹配。它主要在 Bash 的条件表达式中使用,可以实现复杂的字符串模式匹配。

基本语法

注意=~ 必须在 [[ ]] 双方括号中使用,不能在单方括号 [ ]test 命令中使用。

基础示例

示例 1:检查字符串是否包含数字

示例 2:验证邮箱格式

捕获匹配结果

当正则表达式匹配成功时,匹配的结果会自动保存在 BASH_REMATCH 数组中:
  • ${BASH_REMATCH[0]}:完整的匹配结果
  • ${BASH_REMATCH[1]}:第一个捕获组
  • ${BASH_REMATCH[2]}:第二个捕获组
  • 以此类推...

示例:提取匹配内容

输出:

常用正则表达式模式

数字验证

IP 地址验证

URL 验证

日期格式验证

提取复杂信息

示例 1:解析日志文件

输出:

示例 2:提取文件名和扩展名

示例 3:解析版本号

实用函数封装

验证函数库

常见陷阱与注意事项

1. 正则表达式不要加引号

2. 转义字符的处理

3. 大小写敏感

4. BASH_REMATCH 的作用域

性能考虑

对于大量的字符串匹配操作,=~ 的性能通常优于调用外部命令如 grepsed

实战案例

案例 1:配置文件解析

案例 2:用户输入验证

案例 3:日志分析

正则表达式速查表

模式
说明
示例
^
行首
^Hello 匹配以 Hello 开头
$
行尾
end$ 匹配以 end 结尾
.
任意单个字符
a.c 匹配 abc、a1c
*
前一个字符0次或多次
ab* 匹配 a、ab、abb
+
前一个字符1次或多次
ab+ 匹配 ab、abb
?
前一个字符0次或1次
ab? 匹配 a、ab
[abc]
字符集
[0-9] 匹配任意数字
[^abc]
非字符集
[^0-9] 匹配非数字
(pattern)
捕获组
([0-9]+) 捕获数字
`\
`
{n}
重复n次
[0-9]{3} 匹配3位数字
{n,}
至少n次
[0-9]{3,} 匹配至少3位数字
{n,m}
n到m次
[0-9]{3,5} 匹配3到5位数字

总结

=~ 操作符是 Bash 中进行正则表达式匹配的强大工具,适用于:
  • 输入验证
  • 日志分析
  • 配置文件解析
  • 数据提取
  • 格式检查
掌握 =~ 的使用,结合 BASH_REMATCH 数组,可以在 Shell 脚本中实现复杂的字符串处理逻辑,而无需依赖外部工具。
上一篇
Shell 整数比较操作符详解:-eq、-ne、-gt、-lt、-ge、-le
下一篇
Shell 参数扩展详解:${}、##、%%、:-、:+ 和 ? 的使用