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 的作用域
性能考虑
对于大量的字符串匹配操作,
=~ 的性能通常优于调用外部命令如 grep 或 sed:实战案例
案例 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 脚本中实现复杂的字符串处理逻辑,而无需依赖外部工具。- 作者:Orz
- 链接:https://blog.1567890.xyz/learning/shell-regex-operator
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

