Linux shell 本身并不直接支持正则表达式,但许多 shell 内的工具和命令都广泛使用了正则表达式。掌握基本正则表达式和扩展正则表达式中的元字符含义及其用法,对熟练应用 shell 编程非常有帮助。
【一】概述
正则表达式(RE,regular expression)是由普通字符和元字符组合成的一个字符串,主要用于文本搜索和字符串处理。它可以匹配文本中的单个字符或字符集合,适用于数据流处理以及数据筛选。
正则表达式的优缺点如下:
优点:语法简洁,功能强大。
缺点:不易理解,难以记忆。
【二】组成部分
正则表达式由字符类、数量限定符、位置限定符以及一些特殊字符构成。
1. 字符类
字符类表示一个字符,它的值可以是该类字符中的任意一个。常见的字符类见表:
2. 数量限定符
数量限定符用于控制字符出现的次数。常见的数量限定符见表:
3. 位置限定符
位置限定符描述字符类与普通字符之间的位置关系。常见的位置限定符见表:
4. 特殊字符
在某些情况下,正则表达式会用到特殊字符,常见的特殊字符见表:
【三】分类
根据 POSIX 标准,正则表达式主要分为基本正则表达式和扩展正则表达式。Linux 支持基本正则表达式。
1. 基本正则表达式
基本正则表达式(basic regular expression, BRE)又称为标准正则表达式,是最早的正则表达式规范,支持的元字符较少。常用工具如 grep、egrep、sed、awk 支持基本正则表达式。常见的元字符见表:
注意:使用 egrep 和 awk 进行 {n}、{n,}、{n,m} 匹配时,不需要在 "{}" 前加 "\"。
2. 扩展正则表达式
扩展正则表达式(extended regular expression, ERE)支持更多的元字符,但有些基本正则表达式中的元字符在扩展正则表达式中不支持。常用工具如 egrep、awk 支持扩展正则表达式。扩展的元字符见表: