一、正则表达式是什么?
正则表达式(Regular Expression,简称 Regex/RE)是一种文本匹配的模式语言,可以理解为”文本搜素的高级规则‘。在Shell编程中,正则表达式常与grep、sed、awk等工具结合,用于筛选、替换、提取文本内容,比如日志分析、数据清洗、配置文件解析等场景。
Shell中常用的正则表达式分为两类:
- 基础正则表达式(BRE):兼容 POSIX 标准,grep(默认)、sed(默认)使用,语法相对基础;
- 扩展正则表达式(ERE):包含更多高级语法,grep -E、egrep、awk、sed -E支持,功能更强大。
二、基础匹配规则
普通字符直接写字母、数字、符号,就匹配自身,比如test匹配文本里的test。
任意单个字符. 匹配除换行外的任意一个字符。例:h.llo 可匹配 hello、hallo、h9llo。
字符集合
- [abc] 匹配 a、b、c 中任意一个
- [a-z] 匹配小写字母,[0-9] 匹配数字
- [^abc] 匹配不是a、b、c 的字符
三、数量匹配(重复次数)
基础正则 BRE
- *:前面字符出现 0 次或多次
- \\+:前面字符出现 1 次或多次
- \\?:前面字符出现 0 次或 1 次
- \\{n\\}:恰好 n 次
- \\{n,\\}:至少 n 次
- \\{n,m\\}:n~m 次
扩展正则 ERE(更常用)
直接去掉反斜杠:
- *:0 次或多次
- +:1 次或多次
- ?:0 次或 1 次
- {n}、{n,}、{n,m}
示例:go+ 匹配 go、goo、gooo 等。
四、位置锚定(限定行 / 单词)
- ^:匹配行开头例:^root 找出以 root 开头的行
- $:匹配行结尾例:bash$ 找出以 bash 结尾的行
- ^$:匹配空行
- \\< 或 \\b:匹配单词开头
- \\> 或 \\b:匹配单词结尾
五、分组与逻辑或
基础正则
- `内容``:分组,把一串字符当整体
- \\|:或者
例:\\(hello\\)\\|world 匹配 hello 或 world
扩展正则
- (内容):分组
- |:或者
例:(hello)|world
六、Shell 中最常用组合
bash
运行
grep -v "^$" 文件名
bash
运行
grep -v "^#" 文件名 | grep -v "^$"
bash
运行
grep -E "^1[3-9][0-9]{9}$" 文件名
bash
运行
grep -E "([0-9]{1,3}\\.){3}[0-9]{1,3}" 文件名
七、小结
- 正则 = 字符规则 + 数量规则 + 位置规则
- Shell 里优先用 grep -E 写扩展正则,更简单
- 核心用途:查找、过滤、替换、校验格式



