扩展正则表达式功能与基本正则表达式相同,但是语法更简洁易懂。
我们可以使用grep -E来支持扩展正则表达式,也可以使用专用命令egrep。
egrep [OPTIONS] PATTERN [FILE...]
选项:
-i,-o, -v, -q, -A, -B, -C(这些选项含义与grep相同,忘记的可以man或者回去看上一节grep的讲解)
-G:本次改为支持基本正则表达式
扩展正则表达式的元字符:
字符匹配:
.:任意单个字符
[]:括号内填写指定范围内的个字符
[^]:指定范围外的任意单个字符
次数匹配:
*:任意次,0,1或多次;
?:0次或1次,其前的字符是可有可无的;
+:其前字符至少1次;
{m}:其前的字符m次;
{m,n}:至少m次,至多n次;
{0,n}:至多n次
{m,}:至少m次
位置锚定
^:行首锚定;
$:行尾锚定;
\<, \b:词首锚定;
\>, \b:词尾锚定;
分组及引用:
():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;
后向引用:\1, \2,...
或(多个pattern命中一个即可):
a|b:a或者b;
比如:
C|cat:C或cat
(c|C)at:cat或Cat
下面举例一些联系,帮助你掌握:
查看/etc/sudoers中的非空白行和非注释行
[root@localhost ~]# cat /etc/sudoers |egrep -v "^$|^#"
使用扩展正则表达式过滤出/etc/fstab的基名(开头非/,中间不出现/,结尾可能含/)
[root@localhost ~]# echo /etc/fstab | grep -E -o "[^/]+/?$"
找出ip a命令结果中的1-255之间的数值
[root@localhost ~]# ip a | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"