grep [options] PATTERN [FILE....]
-i:不区分大小写
--color:高亮显示匹配字符
-v:显示没有被匹配到的行
-o:只显示被匹配到的字符串
-E:使用扩展正则表达式
*:任意长度的任意字符
?:匹配任意单个字符
[]:匹配指定范围内的任意字符
[^]:匹配指定范围外的字符
-A n:显示匹配到行下面n行
-B n:显示匹配到行上面n行
-C n:显示匹配到行前后n行
正则表达式:REGEXP
Basic REGEXP:基本正则表达式
Extended REGEXP:扩展正则表达式
基本正则表达式
grep默认使用基本正则表达式,使用-E参数表示使用扩展名正则表达式
元字符
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
同时也支持通配符:http://iyull.blog.51cto.com/4664834/1882815
[a-z],[A-Z],[0-9],[a-zA-Z],[0-9a-zA-Z]
[[:space:]]:空白字符
[[:punct:]]:标点符号
[[:lower:]]:小写字母
[[:upper:]]:大写字母
[[:alpha:]]:大小写字母
[[:digit:]]:数字
[[:alnum:]]:数字和大小写字母
次数匹配
*:匹配其前面字符任意次
a,b,ab,aab,acb,acdb
a*b则只可以匹配b,ab,aab
.*:任意长度的任意字符
?:匹配其前面的字符一次或0次,一般需要使用\?转义
a,b,ab,aab,acb,acdb
a\?b则只可以匹配b,ab,aab,acb,acdb
注:grep是在行中查找,因此只要按照模式匹配到部分字符就可以匹配
\{m,n\}:匹配其前面字符,至少m次,至多n次。
\{1,\}:至少一次
\{0,5\}:至少0次至多5次
1
2
|
[root@liang-study basic]
# grep '[[:space:]]\{1,3\}[0-9]\{1,\}$' a.txt
1
|
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符后面的任意内容必须出现在行尾
^$:空白行
\<或者\b:其后面的字符必须作为词组的首部出现,注意书写位置
\>或者\b:其前面的字符必须作为词组的尾部出现,注意书写位置
例子:\<root\>:表示查找包含root作为单独词组的行
分组:
\(\)
\(ab\)*:表示匹配ab任意次,即要么有ab,要么没有ab,所以全部都会匹配。如abab,ababc,a,b。
1
2
3
4
5
|
[root@liang-study basic]
# grep '\(ab\)\{1,3\}' a.txt
23ab
ab
aab
aaab
|
上例,就表示匹配包含ab的1-3次
\(ab\).*\1:引用第一个左括号以及与之对应的右括号中间的所有内容
\2
\3
1
2
3
|
[root@liang-study basic]
# grep '\(ab\).*\1' a.txt
23ab cdh ab
aab root ab
|
上例中表示匹配到ab后由任意字符后再次匹配ab的行
1
2
|
[root@liang-study basic]
# grep '\(ab\).*\(cd\).*\2' a.txt
23ab cdh ab
cd
|
匹配第二个左括号以及与之对应的右括号中间的所有内容
扩展正则表达式
字符匹配:
.:匹配任意单个字符(类基本)
[]:匹配指定范围内的任意单个字符(类基本)
[^]:匹配指定范围外的任意单个字符(类基本)
次数匹配:
*:匹配其前面字符任意次(类基本)
?:匹配其前面的字符一次或0次,一般不需要使用\转义
+:匹配其前面字符至少一次
(m,n):匹配其前面字符,至少m次,至多n次。一般不需要使用\转义
位置锚定:(和基本正则表达式相同)
分组:
(ab):
(ab){1}:引用第一个左括号以及与之对应的右括号中间的所有内容
(ab){2}:引用第2个左括号以及与之对应的右括号中间的所有内容
|和or:表示或者
注:可以看出此匹配是完整匹配A|a左边和右边。
注:经过分组匹配,即可匹配Ab或者ab了
例子:获取ifconfig 0-255之间的整数
1
2
3
4
5
6
|
ifconfig
|
grep
-E --color
'\<([1-9]|[1-9][0-9]|1[1-9][0-9]|2[0-4][0-9]|25[0-4])\>'
[1-9]:匹配符合条件的个位数
[1-9][0-9]:匹配符合条件的两位数
1[1-9][0-9]:匹配符合条件的1xx的三位数
2[0-4][0-9]:匹配符合条件的2xx的三位数
25[0-4]:匹配符合条件的25x的三位数
|