一、介绍

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep 老三 擅长过滤
sed 老二 擅长对行进行操作 ———配置文件
awk 老大 擅长对列进行操作 ———日志文件

二、grep参数说明

grep -i 忽略大小写
grep -c 统计行数
grep -A 数值 显示过滤信息后几行信息(包括匹配行)
grep -B 数值 显示过滤信息前几行信息(包括匹配行)
grep -C 数值 显示过滤信息上下几行内容(包括匹配行)
grep -v 对过滤内容进行排除,显示其他的信息
grep -n 显示过滤出来数据内容的行号信息
grep -o 显示过滤的过程(只显示过滤的信息,默认会将一行信息都进行显示)
grep -E/egrep 可以识别扩展正则符号信息
grep -r 可以递归查找目录下面每一个文件的数据内容
grep -L 只显示不包含匹配的文件名清单,不进入到目录中
grep -l 只显示包含匹配的文件名清单,不进入到目录中
grep -w 只显示完整单词的匹配
grep -x 只显示完整行的匹配
grep -h 不显示文件名。

三、用法

3.1 过滤以m开头的行

[root@m01 ~]# grep ‘^m’ passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

3.2 过滤以sync结尾的行

[root@m01 ~]# grep ‘sync$’ passwd
sync:x:5:0:sync:/sbin:/bin/sync

3.3 过滤空行,不显示空行

[root@m01 ~]# grep -v ‘^$’ passwd

3.4 显示匹配内容的前2行

[root@m01 ~]# grep -B2 ‘^m’ passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

3.5 显示匹配内容的后2行

[root@m01 ~]# grep -A2 ‘^m’ passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

3.6 显示匹配内容的前后2行

[root@m01 ~]# grep -C2 ‘^m’ passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

3.7 过滤nologin,只显示匹配的内容

[root@m01 ~]# grep -o ‘nologin’ passwd
nologin
nologin

3.8 过滤出sever的单词

[root@m01 ~]# grep -w ‘server’ /etc/ssh/sshd_config
# This is the sshd server system-wide configuration file. See
Subsystem sftp /usr/libexec/openssh/sftp-server
# ForceCommand cvs server

3.9 根据文件内容查找目录下的文件所在位置和内容

[root@m01 ~]# grep -r ‘hello’ /root/
/root/.bash_history:cowsay hello

3.10 忽略大小写查找数据

grep -i ‘failed’ /secure
Dec 11 03:49:25 localhost sshd[27087]: Failed password for invalid user support from 123.31.34.190 port 55493 ssh2

3.11 统计文本中包含匹配字符串的行数

grep -c ‘Failed’ /oldboy/secure-20161219
367500

3.12 对指定内容进行排除

grep -v ‘oldboy03’ oldboy.txt
oldboy01
oldboy02
PS: 不想看注释信息
grep -v ‘#’ /etc/selinux/config

3.13 查看特定字符串位于第几行

grep -n “test” /etc/passwd

3.14 显示哪个文件中有特定的字符串

grep -lr “test” /etc/

3.15 使用正则表达式

grep -E “[1-9]+” 或 egrep “[1-9]+”

3.16 多逻辑匹配

方法1:使用-e选项
grep -e “hello world” -e “mailx” -r /home/tyrone

方法2:使用正则表达式,-E
grep -E “hello world|mailx” -r /home/tyrone

方法3:使用正则表达式,egrep,同grep -E等效
egrep “hello world|mailx” -r /home/tyrone

3.17 过滤文件里的空行和#号注释(重要)

egrep -v “^$|#” /etc/zabbix/zabbix_proxy.conf

3.18 零宽断言

  1. grep -oP "(?<=file=')[^']+" /opt/centos2.qcow2
  2. ifconfig eth0|grep -oP '(?<=inet )\S+'
  3. ## -P perl表达式