UNIX/LINUX SHELL 正则表达式语法详解附使用方法

2020-01-18 19:41:36于丽
匹配大写字母 A。 a 匹配小写字母 a。 /d 匹配任意一位数字。 /D 匹配任意单个非数字字符。 /w 匹配任意单个字母数字字符,同义词是 [:alnum:]。 [A-E] 匹配任意大写的 A、B、C、D 或 E。 [^A-E] 匹配除 A、B、C、D 和 E 之外的任意字符。 X? 匹配出现零次或一次的大写字母 X。 X* 匹配零个或任意个大写 X。 X+ 匹配一个或多个字母 X。 X{n} 精确匹配 n 个字母 X。 X{n,m} 匹配最少 n 个并且不超过 m 个字母 X。如果省略 m,表达式将尝试匹配最少 n 个 X。 (abc|def)+ 匹配一连串的(最少一个) abc 或 def;abc 和 def 将匹配。

以下是一些使用 grep 作为搜索工具的正则表达式示例。许多其他 UNIX 工具,包括交互式编辑器 vi 和 Emacs、流编辑器 sed 和 awk,以及所有现代编程语言都支持正则表达式。在您学会正则表达式的语法(也许相当晦涩)之后,就可以将您的专业知识灵活运用到不同的工具、编程语言和操作系统。

查找以“Bat”开头的名称

要查找以“Bat”开头的名称,请使用:

grep -E '^Bat'

可以使用 -E 选项来指定正则表达式。^(脱字号)字符匹配行首或字符串的开头,这是一个出现在每行或每个字符串开头字符之前的假想字符。字母 B、a 和 t 只具有字面含义并且仅匹配那些特定的字符。因此,命令 grep -E '^Bat' 将生成:

Batman
Batgirl

由于许多 regex 操作符也为 Shell 所使用(其中一些具有不同的用途,另外一些则有类似的用途),因此一个好的习惯是使用单引号将命令行中的每个 regex 括起来,以保护 regex 操作符免遭 Shell 的误解。例如,*(星号)和 $(美元符号)都是 regex 操作符,并且对于您的 Shell 具有特殊的含义。

查找以“man”结尾的名称

要查找以“man”结尾的名称,可以使用 regex man$ 来匹配序列 m、a 和 n,并且后面紧接与 regex 操作符 $ 匹配的行(字符串)。

查找空行

基于 ^ 和 $ 的作用,您可以使用 regex ^$ 来查找空行(相当于在开始之后立即结束的行)。