grep

grep扩展正则表达式(egrep)

基本正则表达式

# 如查找/etc/passwd文件中以r开头,t结尾,中间包含两个任意字符的单词
grep "\<r..t\>" /etc/passwd

root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

# 注意与grep "r..t" /etc/passwd结果的区别:
grep "r..t" /etc/passwd

root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

即引用的为前面匹配内容加上r,因此He like his lover这一行就不会被匹配。

字符匹配

扩展模式下的字符匹配与基本正则表达式的字符匹配相同,如:

次数匹配

上述字符匹配中,基本正则表达式与扩张表达式完全相同,但次数匹配就有些不一样了。

位置锚定

与基本正则表达式完全意义,请参考上一篇。

分组

基本正则表达式中支持分组,而在扩展正则表达式中,分组的功能更加强大,也可以说才是真正的分组,用法如下:

如:grep '^(barlow).*\1' /etc/passwd 搜索/etc/passwd中以barlow开头,而后面还存在barlow的行

或者

使用范例

# a|b:匹配a或b
grep -E "Barlow|barlow" barlow1.txt

# (B|b)arlow 匹配Barlow或者barlow
grep -E "(B|b)arlow" barlow1.txt

# 获取以A,B,C表的插入数据行
cat < a.txt <<EOF
INSERT INTO `A` VALUES ...
INSERT INTO `B` VALUES ...
INSERT INTO `C` VALUES ...
#INSERT INTO `D` VALUES ...
EOF
cat a.txt |grep -E "^INSERT INTO \`(A|B|C)\` "

# 找出/etc/fstab文件中以#开始的行,并标识其所在行号
grep --color -n -E "^[#]+" /etc/fstab
2:#
3:# /etc/fstab
4:# Created by anaconda on Sat Jul 13 18:13:39 2013

# 找出除lo以外的其他接口的IPv4地址信息
ip add list |egrep "^[[:space:]]+inet[^6].*[^lo]$"

inet 192.168.7.100/24 brd 192.168.7.255 scope global eth0

# 找出ifconfig不包含回环地址的其他IP地址,不包括IP广播地址和子网掩码等信息:
ifconfig |egrep --color "\<([1-9]|[1-9][0-9]|1[0-1]+[0-9]+|12[^7]+|1[3-9]+[0-9]|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"

inet addr:192.168.7.100 Bcast:192.168.7.255 Mask:255.255.255.0

# 多条件并列排除匹配
zcat mydb.bak.20140408_1.dump.gz |grep -v -E "^INSERT INTO \`(ci_channel|ci_cluster)\` "