grep:根据模式,搜索文本,将匹配的行显示出来
语法:grep [OPTIONS] PATTERN [FILE...]
PATTERN:将文本字符和正则表达式的元字符组合成的匹配条件
如: grep ‘root‘ /etc/passwd,查找出文件中包含‘root‘字符的行。
OPTIONS:
--color:将匹配到的串用高亮颜色显示出来
如: grep --color ‘root‘ /etc/passwd
另:alias grep=‘grep --color‘,可定义为别名
-i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files.
忽略模式匹配大小写
如:
[root@station01 ~]# grep -i ‘Root‘ /etc/passwd
root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash
operator:*:11:0:operator:/root:/sbin/nologin
-v:显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串,并且每个串显示为一行
-E:扩展正则表达式
-A NUM:显示匹配到行的后NUM行,即After
[root@station01 ~]# grep --color -A 3 ‘cpu MHz‘ /proc/cpuinfo
cpu MHz : 2128.040
cache size : 4096 KB
fdiv_bug : no
hlt_bug : no
-B NUM:显示匹配到行的前NUM行,即Before
[root@station01 ~]# grep --color -B 3 ‘cpu MHz‘ /proc/cpuinfo
model : 26
model name : Intel(R) Xeon(R) CPU E5506 @ 2.13GHz
stepping : 5
cpu MHz : 2128.040
-C NUM:显示匹配到行的前后NUM行,即Context
[root@station01 ~]# grep --color -C 3 ‘cpu MHz‘ /proc/cpuinfo
model : 26
model name : Intel(R) Xeon(R) CPU E5506 @ 2.13GHz
stepping : 5
cpu MHz : 2128.040
cache size : 4096 KB
fdiv_bug : no
hlt_bug : no
如:
[root@station01 ~]# grep -o ‘root‘ /etc/passwd
root
root
root
root
通配字符:
globbing:
*:任意长度的任意个字符
?:任意单个字符
[]:指定范围内的字符
[^]:指定范围外的字符
正则表达式:Regular Expression ,REGEXP,由不表示字符本身意义的元字符组成
元字符:
.:匹配任意单个字符
如:查找以r开头t结尾中间是任意两个字符的字符串
[root@station01 ~]# grep --color ‘r..t‘ /etc/passwd
root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash
operator:*:11:0:operator:/root:/sbin/nologin
ftp:*:14:50:FTP User:/var/ftp:/sbin/nologin
*:表示匹配其前面的字符任意次数,即0到无穷次
如:
test2.txt文件中的内容如下:
a
b
ab
aab
aaab
acb
addb
amnb
结果:
[root@station01 ~]# grep --color "a*b" ./test2.txt
b
ab
aab
aaab
acb
addb
amnb
.*:表示任意长度的任意字符
如:
结果:
[root@station01 ~]# grep --color "a.*b" ./test2.txt
ab
aab
aaab
acb
addb
amnb
默认情况下正则表达式工作在贪婪模式下,即尺可能多的匹配
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:alnum:]所有字符, [:alpha:]所有字母, [:cntrl:], [:digit:]所有数字, [:graph:], [:lower:]小写字母, [:print:],
[:punct:]符号, [:space:]空白字符, [:upper:]大写字母, [:xdigit:]
如:test2.txt文件
[root@station01 ~]# cat test2.txt
a
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb
执行结果:
[root@station01 ~]# grep --color "a.*b" ./test2.txt
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb
正常应该匹配到第一个amb即可
\?:匹配其前字符0次或1次,注意模式中?号防需要转义,即\?
如:
结果:
[root@station01 ~]# grep --color "a\?b" ./test2.txt
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb
整个串中有部分匹配
\{m,n\}:匹配其前字符至少m次,至多n次
如:
\{1,\}:至少1次
\{,5\}:至多5次
查找a至少出现1次,至多3次,结尾是b的字符串
结果:
[root@station01 ~]# grep --color "a\{1,3\}b" ./test2.txt
ab
aab
aaab
ambbmnbaaafbaaabadffb
查找a开头b结尾,中间出现至少1个最多3个的任意字符
[root@station01 ~]# grep --color "a.\{1,3\}b" ./test2.txt
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb
位置锚定
^:行首锚定,此字符后的任意字符出现在行首
查找/etc/passwd文件中以r开头,以t结尾,中间出现任意两个字符的字符串,且出现在行首
结果:
[root@station01 ~]# grep --color ‘^r..t‘ /etc/passwd
root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash
$:行尾锚定,此字符前的内容必须出现在行尾
查找/etc/inittab中以w结束的行
结果:
[root@station01 ~]# grep --color ‘w$‘ /etc/inittab
# For information on how to write upstart event handlers, or how
^$:空白行
查找/etc/inittab中的空白行
[root@station01 ~]# grep ‘^$‘ /etc/inittab |wc -l
2
查找以数字结尾的行
[root@station01 ~]# grep --color ‘[[:digit:]]$‘ /etc/inittab
# 5 - X11
单词锚定
\<:其后面的字符必须作为单词的首部出现,也可\b
\>:其前的字符必须作为单词的尾部出现,也可\b
\<root\<:root必须作为一行的单词出现,也可\broot\b
如文件test3.txt文件内容如下:
[root@station01 ~]# cat test3.txt
root is administrator.
admin is a rooter.
adminrooter is wrong.
he is heroot
查找root出现在词首的行
结果:
[root@station01 ~]# grep --color ‘\<root‘ test3.txt
root is administrator.
admin is a rooter.
查找root出现在词尾的行
结果:
[root@station01 ~]# grep --color ‘root\>‘ test3.txt
root is administrator.
he is heroot
查找以一个单词出现的行
结果:
[root@station01 ~]# grep --color ‘\<root\>‘ test3.txt
root is administrator.
[root@station01 ~]# grep --color ‘\broot\b‘ test3.txt
root is administrator.
分组
\(\):将一串字符看成一个整体
查找以ab为一个整体出现的行
文件内容如下:
[root@station01 ~]# cat test2.txt
a
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb
执行结果:
[root@station01 ~]# grep --color ‘\(ab\)*‘ test2.txt
a
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb
后向引用:前面出现的字符串,后面引用
\1:引用第一个左括号和第一个右括号所包括的内容
\2:同上,只不过是第二个
\3:同上,只不过是第三个
测试文件内容如下:
[root@station01 ~]# cat test4.txt
he like his lover
she love her liker
he like his liker
she love her lover
执行结果:
查找以l开头,e结尾,中间跟两个任意字符的行
[root@station01 ~]# grep --color ‘l..e‘ test4.txt
he like his lover
she love her liker
he like his liker
she love her lover
查找以l..e开头并以l..e结尾中间跟任意个字符的行
[root@station01 ~]# grep --color ‘\(l..e\).*\1‘ test4.txt
he like his liker
she love her lover
查找/etc/inittab中前面是任意数字,并以此数字结尾的行
[root@station01 ~]# grep --color ‘\([0-9]\).*\1$‘ /etc/inittab
# 5 - X11
2015年2月16日于银川
GB-2312
本文出自 “无知有知” 博客,请务必保留此出处http://yujiqing.blog.51cto.com/1475974/1614822
原文地址:http://yujiqing.blog.51cto.com/1475974/1614822