# 延伸正则表示法
一般来说,只要了解了基础正则表示法大概就已经相当足够了,所谓技多不压身;还可以了解使用范围更广的延伸正则表示法。举个例子:前面讲解到要去除空白行与行首为 # 的行,使用的是
grep -v '^$' regular_express.txt | grep -v '^#'
1
需要使用到管线命令来搜寻两次,使用延伸的正则表示法则如下
egrep -v '^$|^#' regular_express.txt
1
此外,grep 预设仅支持基础的正则表示法,可以使用 -E 参数开启,不过建议用别名 egrep
下面是延伸正则表示法的符号(RE 字符)说明:
- +:重复「一个或一个以上」的前一个 RE 字符- 范例:搜索 (god)(good)(goood)...等字符串。 可以使用 - [mrcode@study tmp]$ egrep -n 'go+d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs! 9:Oh! The soup taste good! 13:Oh! My god!1
 2
 3
 4
- ?:「0 个或 1 个」的前一个 RE 字符- 范例:搜索 gd、god - [mrcode@study tmp]$ egrep -n 'go?d' regular_express.txt 13:Oh! My god! 14:The gd software is a library for drafting programs!1
 2
 3
- |:用或(or)的方式找出数个字符串- 范例:搜索 gd 或 good - [mrcode@study tmp]$ egrep -n 'gd|good' regular_express.txt 1:"Open Source" is a good mechanism to develop programs! 9:Oh! The soup taste good! 14:The gd software is a library for drafting programs!1
 2
 3
 4
- ():找出「群组」字符串- 范例:搜索 glad 或 good - # 当然,这里使用上面完整的或来匹配两个固定单词也是可以的 [mrcode@study tmp]$ egrep -n 'g(la)|(oo)d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs! 2:apple is my favorite food! 9:Oh! The soup taste good! 16:The world <Happy> is the same with "glad"!1
 2
 3
 4
 5
 6
- ()+:多个重复群组的判别- 范例:将「AxyzxyzxyzxyzC」用 echo 叫出,然后再使用如下的方法搜索 - [mrcode@study tmp]$ echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)' Axyz xyzxyzxyzC # 在命令行中是有红色高亮的,这个只能高亮到 Axyz [mrcode@study tmp]$ echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+' Axyzxyzxyzxyz C # C 不会高亮 [mrcode@study tmp]$ echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C' AxyzxyzxyzxyzC # 完全匹配1
 2
 3
 4
 5
 6
TIP
要特别注意:grep -n '[!>]' xx.txt 的含义并不是除了 > 字符之外的字符,因为 !  不是一个特殊符号
想要表示非,需要这样写 grep -n '[^a-z]' xx.txt
← 基础正则表达式 文件的格式化与相关处理 →