语法格式
egrep [OPTIONS] PATTERN [FILE...]
egrep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
说明: egrep 和 grep 的语法一致,区别在于元字符的使用上: 扩展的正则表达式与基本正则表达式一致,但是不用转义。
基本正则表达式元字符:
字符匹配:., .*, [], [^]
次数匹配:(通过分组的方式对不止一个字符做次数匹配) *, \?, \+, \{m,n\}
位置锚定:^, $, \< (\b), \> (\b)
分组及引用:\(\), \n
扩展的正则表达式元字符
字符匹配:., .*, [], [^]
次数匹配:(通过分组的方式对不止一个字符做次数匹配)
* 任意次数
? 0或者1次
+ 1或者多次
{m,n} 精确匹配,至少m次,至多n次
位置锚定:
^ 锚定行首
$ 锚定行尾
\< (\b) 锚定词首
\> (\b) 锚定词尾
分组及引用:
() 分组
\n 后向引用
或者:
a|bc a或者bc
C|cat C或者cat
(c|C)at Cat或者cat
扩展的正则表达式示例:
1、显示当前系统上root、fedora或user1用户的默认shell 和 uid;
# grep -E "^(root|fedora|user1):" /etc/passwd | cut -d: -f7
# egrep "^(root|fedora|user1)\>" /etc/passwd | cut -d: -f3,7
2、找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;
# grep -o -E "\<[[:alpha:]]+\>\(\)" /etc/rc.d/init.d/functions
# egrep -o "\<[[:alpha:]]+\>\(\)" /etc/rc.d/init.d/functions
3、使用echo命令输出一个路径,而后使用grep取出其基名;
# echo "/etc/sysconfig/" | grep -o -E "[^/]+/?$" | cut -d/ -f1
# echo "/etc/sysconfig/" | egrep -o "[^/]+/?$" | cut -d/ -f1
4、找出ifconfig命令结果中的1-255之间的数字;
# ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
5、挑战题:写一个模式,能匹配合理的ipv4地址;
# 分析: 1.0.0.1-239.255.255.255
# ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
网友评论