一.功能
用正则表达式在文件或输入中搜索匹配的字符串,并打印出匹配的行。egrep匹配之前,会删除每行结尾的换行符。
二.语法
grep [OPTION]... PATTERN [FILE]...
OPTION 是选项,如 -i 匹配时忽略大小写
PATTERN 是正则表达式,需要用单引号扩起来
FILE 是文件,可以同时搜索多个文件
三.元字符
3.1 行首与行尾
^ 匹配行首
$ 匹配行尾
3.2 字符组[]
[]字符组,用于匹配字符组内任意字符,在字符组内部与外部,关于元字符的规定是不同的。
3.2.1 字符组内元字符
l 连字符“-”,在子字符组内连字符表示范围
l 脱字符“^”,在子字符组内脱字符表示否定
3.2.2 字符组注意事项
l 连字符“-”,位于字符组内第一个字符时,只是普通字符,不具备特殊意义
l 在字符组内字符 ? . \ 都是普通字符
3.2.3 字符组例子
[.\?] 匹配.或?或\,这里的元字符.?当做普通字符处理,这里的\没有转译的功能。
[-12] 匹配-或1或2,这里的连字符当做普通字符处理
[abc] 匹配a或b或c
[0-9] 匹配任意一个数字
[a-z] 配置任意一个小写字母
[0-9a-zA-Z] 匹配任意数字或字母
[^1-5] 匹配1-5之外的任意字符
3.3 多选结构 |
| 表示”或”的意思,用于表示任意子表达式。多选结构用括号来界定范围
3.3.1 多选结构例子
grey|gray 或gr(a|e)y 或 gr[ae]y 都匹配 gray 或 grey
3.3.2 多选结构注意事项
l 多选结构用括号来界定范围
l 多选结构的每个子表达式自身都可能是完整的正则表达式,都可以匹配任意长度的文本
3.3.3 多选结构与字符组的区别:
字符组可以算是一门独立的微型语言,它对元字符有其自身的规定
多选结构则是正则表达式语言主体的一部分。
3.4 单词分界符
\< 用于匹配单词的首
\> 用于匹配单词的尾
如:
\<Cat\> 匹配单词Cat 不匹配包含Cat的其它单词,如Cata 、cCat
元字符序列:
3.5 可选项元素及量词 ?
元字符?用于表示可选项,表示有或者没有;元字符?一定要放在某个字符的后面,用于表示该字符有或没有,并且用括号来界定元字符?的作用对象
如:
July? 匹配Jul 或 July ;都表示七月
A(July)? 匹配A 或 July; 这里用括号来界定了元字符?的作用对象。
July? (fourth|4(th)?) 匹配 July fourth 或 July 4 或 July 4th 或 Jul fourth 或 Jul 4 或 Jul 4th
量词 |
名称 |
含义 |
? |
问号 |
匹配前面的字符0-1次 |
+ |
加号 |
匹配前面的字符1-N次,尽可能多匹配 |
* |
星号 |
匹配前面的字符0-N次,尽可能多匹配 |
{min,max} |
|
匹配min到max次, |
3.6 括号及反向引用
括号的作用:
3.7.1. 界定|的范围
3.7.2. 的把若干字符组合成一个单元,受量词的作用;如 ?+*{m,n}
3.7.3. 反向引用,
括号能够“记忆”其中子表达式匹配到的文本,可用\num来获取这些匹配到的文本;num代表数字,从1开始,num的编号按照开括号出现的先后排序
如果某个括号只是分组而不捕获,可以使用语法 (?:
如;
([a-z])([0-9])\1\2 \1代表[a-z]匹配的内容 \2代表[0-9]匹配的内容
egrep -i ‘\<([a-z]+) +\1\>’ file 匹配file中任意重复2次的单词
3.7 简单记法:
\t 制表符
\n 换行符
\r 回车符
\s 任何“空白”字符(空格符,制表符,进纸符)
\S 除\s之外的符合
\w [a-zA-Z0-9]
\W [^a-zA-Z0-9]
\d [0-9]
\D [^0-9]
3.8 总结
元字符 |
名称 |
匹配对象 |
. |
点 |
匹配单个任意字符 |
[] |
字符组 |
匹配任意列出的字符 |
[^] |
排除型字符组 |
匹配任意没有列出的字符 |
^ |
脱字符 |
匹配行首 |
$ |
美元符 |
匹配行尾 |
\< |
反斜线-小于 |
匹配词首 |
\> |
反斜线-大于 |
匹配词尾 |
| |
竖线 |
匹配分隔两旁的任意一个表达式 |
() |
括号 |
界定|的作用范围 |