Linux-正则表达式

# 前言

Linux 中对于流式数据处理有 sed 和 gawk 两种工具可以使用,其中模式 (正则) 匹配可以很好的协助我们要对哪些行做处理。因此,正则匹配也就成为 linux 中相对来说比较重要的知识点,对此做了一些整理归纳。

## 特殊字符

本文对正则表达式的归纳主要从 正则表达式的 特殊字符入手,正则中的特殊字符有:

. * + ? ^ \ | / () {} []<br><br>一共15 个字符,可以分类记忆为 (4 + 2 + 3 + 2 * 3):<br><br>- 4 个填充类标识: . * + ?<br>- 2 个锚点符号: ^
- 3 个斜线: \ | /
- 6 个括号: ( ) { } [ ]

## BRE 和 ERE

Linux 中的正则匹配引擎有两种:

- BRE: POSIX 基础正则表达式,basic regular expression
- ERE:POSIX 扩展正则表达式,extended regular expression

显然 ERE 支持的功能比 BRE 更强大,但是所需要的性能开销也更大。 其中, sed 仅仅支持 BRE 引擎(因为更看重流式数据的处理数据),gawk 支持了 ERE。

其中 BRE 无法支持 :

- 加号: +
- 问号: ?
- 管道符号: |
- 间隔符号: { }
- 分组符号: ( )

> gawk 如果要是用 间隔符号 , 需要加上 --re—interval 标识
>

# 四个填充类标识

点号 .

- 表明该位置有一个任意字符

星号

- 表明前一个字符可以出现任意多次(包括0次)

加号 +


- 表明前一个字符至少出现1 次

问号 ?

- 表明前一个字符出现 0 次 或者 1 次

# 两个锚点类符号

脱字符 ^

- 一般用于表达式开头,限定表达式从首部开始匹配
- 如果用于
区间符号(见下文),表明区间取反

美元符 $

- 一般用于表达式末尾,限定字符串末尾模式

# 三个斜线

反斜线 *

- 用于转义特殊字符

管道符 |

- 「或」 语法,用于连接两个匹配规则,任意规则命中,即为命中

正斜线 /

- 字段分隔符 (FS: field separator ),在 sed 或者 gawk 中分割参数信息

# 六个括号

分组符号 ( )

- 用于将一串字符视为整体, 一般后面可接 . * ? + {} 等标识符

间隔符 { }

- 用于指定前一个字符的出现次数,常见用法有 {m} 或者 {m, n}

字符组/区间 [ ]

- 字符组: 表示该位置值字符组中的任一字符,例如 [ab] [abcdefghi] 等
- 区间: 可以用 - 表示取值范围,避免穷举。 例如 [a-g] [1-9]
- 特殊字符组: 用标识来表示区间,特殊字符组如下表所示

| 组 | 描述 |
| --- | --- |
| [[:alpha:]] | 匹配任意字母字符,不管是大写还是小写 |
| [[:alnum:]] | 匹配任意字母数字字符09、AZ或a~z” |
| [[:blank:]] | 匹配空格或制表符 |
| [[:digit:]] | 匹配0~9之间的数字 |
| [[:lower:]] | 匹配小写字母字符a-z |
| [[:print:]] | 匹配任意可打印字符 |
| [[:punct:]] | 匹配标点符号 |
| [[:space:]] | 匹配任意空白字符: 空格、制表符、NL、FF、VT和 CR |
| [[:upper:]] | 匹配任意大写字母字符 A-Z |

你可能感兴趣的:(Linux-正则表达式)