# 延伸正则表示法
一般来说,只要了解了基础正则表示法大概就已经相当足够了,所谓技多不压身;还可以了解使用范围更广的延伸正则表示法。举个例子:前面讲解到要去除空白行与行首为 #
的行,使用的是
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
← 基础正则表达式 文件的格式化与相关处理 →