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

2020-01-18 19:41:36于丽

The Punisher
Ant Man
Dead Girl
Aquaman
SCUD
Spider Woman
Blackbolt
Martian Manhunter

命令行:

grep -i man heroes.txt

将生成:

Catwoman
Batman
Spider Man
Wonder Woman
Ant Man
Aquaman
Martian Manhunter

其中 grep 扫描 heroes.txt 文件中的每一行并查找字母 m,后面紧跟 a,然后紧跟 n。除了必须保证相邻,这些字母可以出现在行的任何位置,甚至可以位于较大的单词中间。在不考虑大小写的情况下(-i 选项),Catwoman、Batman、Spider Man、Wonder Woman、Ant Man、Aquaman 和 Martian Manhunter 都包含字符串 man。

grep 实用工具包含其他可优化搜索的内置选项。例如,-w 选项限制于匹配整个单词,因此 grep -i -w man 将排除 Catwoman 和 Batman(举例来说)。

该工具还有一个优秀的功能,可以排除而不是包括所有匹配的搜索结果。使用 -v 选项来排除 匹配的行。例如:

grep -v -i 'spider' heroes.txt

将打印除了包含字符串 spider 之外的所有行。

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