正则表达式简介
*
我们都使用过带通配符(如和 )的文件通配符?
,以此从数据流中选择特定文件或数据行。这些工具功能强大,我每天都会使用很多次。然而,有些事情是无法用通配符完成的。
正则表达式(regexes 或 RE)为我们提供了更复杂、更灵活的模式
匹配功能。正如某些字符在使用文件通配符时具有特殊含义一样,正则表达式 (RE) 也具有特殊字符。正则表达式 (RE) 主要有两种类型:基本正则表达式 (BRE) 和扩展正则表达式 (ERE)。
我们首先需要的是一些定义。术语“正则表达式”有很多定义,但很多定义都很枯燥,没有信息量。这是我的。
正则表达式是文字和元字符的字符串,各种 Linux 实用程序可将其用作模式,以匹配数据流中的 ASCII 纯文本数据字符串。当匹配发生时,它可用于从流中提取或删除一行数据,或以某种方式修改匹配的字符串。
基本正则表达式 (BRE) 和扩展正则表达式 (ERE) 在功能方面没有太大区别。(请参阅 grep 信息页面的第 3.6 节“基本正则表达式与扩展正则表达式”。)主要区别在于使用的语法和元字符的指定方式。在基本正则表达式中,元字符?
、+
、{
、|
、(
和)
失去了其特殊含义。相反,必须使用反斜杠版本:\?
、\+
、\{
、\|
、\(
和\)
。许多人认为 ERE 语法更易于使用。
注意:当我谈论正则表达式时,一般来说,我通常是指基本正则表达式和扩展正则表达式。如果要进行区分,我将使用缩写词 BRE 表示基本正则表达式,或 ERE 表示扩展正则表达式。
正则表达式 (RE) 比文件通配符更进一步地采用了使用元字符来匹配数据流中的模式的概念,并且让我们能够更好地控制从数据流中选择的项目。各种工具都使用 RE 来解析数据流以匹配字符模式,从而对数据执行某种转换。
注意:解析的一般含义之一是通过研究某事物的组成部分来检查它。为了达到我们的目的,我们解析数据流以找到与指定模式匹配的字符序列。
正则表达式以晦涩难懂和神秘难懂而闻名,只有拥有特殊系统管理员权限的人才能使用。下面这一行代码(我用它来将发送给我的文件转换为可用格式)似乎证实了这一点:
$ cat Experiment_6-1.txt | grep -v Team | grep -v "^\s*$" | sed -e "s/[Ll]eader//" -e "s/\[//g" -e "s/\]//g" -e "s/)//g" | awk '{print $1" "$2" <"$3">"}' > addresses.txt
对于不了解正则表达式的人来说,这个命令管道似乎是一个难以理解的、毫无意义的胡言乱语序列。在我职业生涯的早期,我第一次遇到类似的事情时,确实觉得是这样。正如您将看到的,一旦解释清楚,正则表达式就相对简单了。
我们只能在一篇文章(甚至一个系列)中开始触及正则表达式为我们带来的所有可能性。有整本书专门介绍正则表达式,因此我们将在接下来的一周内在 Enable Sysadmin 上通过一系列文章探讨基础知识。到最后,您将了解足够的知识来开始执行系统管理员的常见任务。希望在那之后,您会渴望自己学习更多。
注意:本文是我的 Linux 书籍《使用和管理 Linux:从零到系统管理员》第 2 卷第 6 章的稍作修改的版本,该书将于 2019 年底由 Apress 出版。