Catwoman
Batman
The Tick
Black Cat
Batgirl
Danger Girl
Wonder Woman
Luke Cage
The Punisher
Ant Man
Dead Girl
Aquaman
SCUD
Blackbolt
Martian Manhunter
但是,对于以下这些情况,您该如何处理?只希望得到那些开头为“Bat的单词;或者以“bat、“Bat、“cat或“Cat开头的单词?或者希望知道有多少漫画复仇者的名字以“man结束 。在这些实例中,类似于上述三个示例的简单字符串搜索将无法满足要求,因为这些搜索不区分位置 。
位置、位置、位置和备选项
正则表达式可以 过滤特定的位置,例如行的开始或结束,以及单词的开始和结束 。正则表达式(通常简写为 regex)还可以描述:备选项(您可将其称为“this或“that);固定长度、可变长度或不定长度的重复;范围(例如,“a-m 之间的任意字母);还有字符的类别或种类(“可打印字符或“标点符号),以及其他技术 。
表 1 显示了一些常用的正则表达式操作符 。您可以连接表 1 中显示的元素(以及其他操作符)并加以组合使用,从而构建(非常)复杂的正则表达式 。
表 1. 常用的正则表达式操作符
操作符用途.(句号)匹配任意单个字符 。^(脱字号)匹配出现在行首或字符串开始位置的空字符串 。$(美元符号)匹配出现在行末的空字符串 。A 匹配大写字母 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 ^$ 来查找空行(相当于在开始之后立即结束的行) 。
备选项或集合操作符
要查找以“bat、“Bat、“cat或“Cat开头的单词,可以使用以下两个技巧 。首先是备选项,如果备选项中的任意 模式匹配,都会产生匹配的结果 。例如,命令:
grep -E '^(bat|Bat|cat|Cat)' heroes.txt
推荐阅读
- 对话 UNIX,第 6 部分: 通过脚本实现操作的自动化
- 提升UNIX中文件系统使用效率
- SCO UNIX基础讲座--第十一讲:TCP/IP 管理
- 什么是第二人格
- 基本配置及操作 SCO UNIX学习宝典
- SCOUNIX基础讲座--第八讲:监视进程管理
- Stty使用技巧一则
- SCO UNIX 5.0.4 DAT磁带机安装
- 初识夏新M350——外观第一感
- UNIX操作系统的版本与标准
