LinuxShell正则表达式

1. 简介

正则表达式在处理数据时非常有用,它凭借强大的模式匹配功能,能够用来精确地过滤文本数据,提取有用的数据信息。

graph LR
A[数据流 ]--> B{正则表达式}
B --> C[匹配数据]
B --> D[滤出数据]

正则表达式是通过正则表达式引擎实现的,正则表达式引擎负责解释正则表达式模式并使用这些模式进行文本数据匹配。在Linux中,主要有两种主流正则表达式引擎:

  • POSIX 基础正则表达式(basic regular expression,BRE)引擎 。
  • POSIX 扩展正则表达式(extended regular expression,ERE)引擎 。

2. BRE 模式

2.1 基本原则

  • 正则表达式模式都区分大小写。
  • 在正则表达式中,空格和其他的字符没有什么区别。
  • 特殊字符不能在文本模式中单独使用,要使用特殊字符作为文本字符必须用 \ 进行转义。

2.2 特殊字符

【注】虽然 / 不是特殊字符,但在sed、gawk编辑器的正则表达式中同样需要使用 \ 进行转义。

符号 名称 功能
^ 脱字符 文本行行首模式(必须放在模式首)
$ 美元符 文本行行尾模式(必须放在模式尾)
. 点字符 匹配除换行符外的任意一个字符
[ ] 中括号 匹配中括号内字符组中的任意一个字符
若在字符组的开头^ 符([^ ]),则匹配除括号内之外的任一字符
若在两个字符间- 符(例[x-y]),则匹配 x~y 区间内的任意一个字符
* 星号 匹配星号前的字符0次或多次

2.3 特殊字符组

特殊字符组 功能
[[:alpha:]] 匹配任一字母字符(不区分大小写)
[[:alnum:]] 匹配任一字母、数字字母(0~9、A~Z、a~z)
[[:blank:]] 匹配空格或者制表符
[[:digit:]] 匹配0~9间的任一数字
[[:lower:]] 匹配任一小写字符a~z
[[:print:]] 匹配任一可打印字符
[[:punct:]] 匹配任一标点符号
[[:space:]] 匹配任一空白字符(空格、制表符、NL、FF、VT、CR)
[[:upper:]] 匹配任一大写字符A~Z

3. ERE 模式

ERE 模式在 BRE 模式的基础上扩展了一些额外功能。

3.1 额外特殊字符

特殊字符 名称 功能
? 问号 匹配问号前的字符0次或1次
+ 加号 匹配加号前的字符1次或多次
{ } 花括号 限定花括号前的字符重复出现次数
{m}:准确出现 m 次
{m,n}:至少出现 m 次、至多 n 次
| 管道符 用逻辑 OR 方式连接左右两个模式(至少匹配二者中的一个)
( ) 圆括号 包括的模式组将被视为一个标准字符看待

4. 附录


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!