龙空技术网

Linux-正则表达式

杨同学编程 186

前言:

现在兄弟们对“linux 正则表达式”大约比较关切,看官们都想要知道一些“linux 正则表达式”的相关文章。那么小编同时在网上汇集了一些关于“linux 正则表达式””的相关资讯,希望各位老铁们能喜欢,同学们一起来学习一下吧!

# **前言**

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

## 特殊字符

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

. * + ? ^ $ \ | / () {} []

一共15 个字符,可以分类记忆为 (4 + 2 + 3 + 2 * 3):

- 4 个填充类标识: . * + ?

- 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:]] | 匹配任意字母数字字符0~9、A~Z或a~z” |

| [[:blank:]] | 匹配空格或制表符 |

| [[:digit:]] | 匹配0~9之间的数字 |

| [[:lower:]] | 匹配小写字母字符a-z |

| [[:print:]] | 匹配任意可打印字符 |

| [[:punct:]] | 匹配标点符号 |

| [[:space:]] | 匹配任意空白字符: 空格、制表符、NL、FF、VT和 CR |

| [[:upper:]] | 匹配任意大写字母字符 A-Z |

标签: #linux 正则表达式 #linux使用正则表达式