一、grep是什么?
Linux grep命令是用于查找文件里符合条件行的shell命令。
二、为什么要使用grep?
在查找文件内容时候,通过使用grep指定条件,可以快速定位到文件里字符串所在的行,提高效率。
三、grep的基本用法
grep命令有三个:grep,egrep,fgrep
grep:根据模式,搜索文本,并将复合模式的问本行显示出来。
-i: 忽视大小写
--color: 高亮色显示匹配内容 -v: 反向查找,没有被模式匹配到的行 -o: 只显示被模式匹配到的字符串 -A: 显示匹配到的行下面N行-B: 显示匹配到的行上面N行
-C: 显示匹配到的行上下行
正则表达式:
*: 匹配其前面的字符任意次
[root@node1 ~]# cat test abaabacbadbanmbnmbnmbnmnbbbsdfb[root@node1 ~]# egrep 'a*b' test # 其面前字符的任意长度例如:b ab aab aaaababaabacbadbanmbnmbnmbnmnbbbsdfb
[root@node1 ~]# egrep 'a?b' test # 匹配其前面的字符1次或者0次,如:ab b abaabacbadbanmbnmbnmbnmnbbbsdfb
.: 匹配任意单个字符
[root@node1 ~]# egrep 'r..t' /etc/passwd # 匹配如:root rabt r/ftroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[-]: 匹配指定范围内的任意单个字符
[root@node1 ~]# netstat -ntplu | egrep '4[0-9]00'tcp 0 0 10.0.0.10:4000 0.0.0.0:* LISTEN 2137/httpd tcp 0 0 10.0.0.10:4100 0.0.0.0:* LISTEN 2137/httpd tcp 0 0 10.0.0.10:4200 0.0.0.0:* LISTEN 2137/httpd tcp 0 0 10.0.0.10:4300 0.0.0.0:* LISTEN 2137/httpd
[^-]: 匹配指定范围外的任意单个字符
[root@node1 ~]# netstat -ntplu | egrep '4[^1-3]00'tcp 0 0 10.0.0.10:4000 0.0.0.0:* LISTEN 2137/httpd
{}: 匹配其前面字符的多少次
[root@node1 ~]# egrep 'a{1,2}b' test # 匹配内容 ab, aab abaab
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
[root@node1 ~]# egrep '^root' /etc/passwdroot:x:0:0:root:/root:/bin/bash
$: 锚定行尾,此字符后面的任意内容必须出现在行尾
[root@node1 ~]# egrep 'shutdown$' /etc/passwd # 匹配以shutdown结尾的行shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
^$: 空白行
[root@node1 ~]# cat abc.txt abc[root@node1 ~]# egrep '^$' abc.txt [root@node1 ~]# egrep '^$' abc.txt | wc -l # 可以统计出来有两行是空格行2
\<或\b: 其后面的任意字符必须作为单词首部出现
[root@node1 ~]# cat test.txt This is root.The user is mroot.rooter is a dog's name.mrooter is not a word.[root@node1 ~]# egrep 'root\>' test.txt # 匹配词尾的This is root.The user is mroot.
\>或\b: 其前面的任意字符必须作为单词尾部出现
[root@node1 ~]# cat test.txt # 记住这里的词首不是行首。因此 This is root. 是没问题的This is root.The user is mroot.rooter is a dog's name.mrooter is not a word.[root@node1 ~]# egrep '\