1.grep介绍

  • grep命令是Linux中的一个强大的文本过滤查找工具,可接正则表达式过滤,把匹配行打印出来
  • 基本语法
grep [-option] pattern filename

2.常用参数

  • 直接加匹配内容(匹配内容可加 " " 也可以不加)
# 输出/etc/passwd有mysql的行
grep mysql /etc/passwd
cat /etc/passwd |grep mysql

# 查看有关mysql服务的进程相关信息
ps -ef |grep "mysql"
  • -v:反向查找,即匹配出没有关键字的行
# 输出/etc/passwd 没有bash的行
grep -v "bash" /etc/passwd
  • -i:匹配时不区分大小写
# 不区分大小写输出/etc/passwd中有bash的行
grep -i "bash" /etc/passwd
  • -c:输出匹配行的行数
# 输出/etc/passwd 含有bash的行数
grep -c "bash" /etc/passwd
  • -o:只输出匹配内容
# 只输出/etc/passwd中root关键字
grep -o "root" /etc/passwd 
  • -n:把行号也输出出来
# 输出/etc/passwd含有bash的行以及行号
grep -n "bash" /etc/passwd
  • -q:不输出到终端
# 过滤/etc/passwd中有root的行但不输出到终端
grep -q "root" /etc/passwd
  • -A,-B,-C:三者后面都是接阿拉伯数字
#-A是显示匹配后和它后面的n行
grep -A 5 ftp /etc/passwd  # 输出/etc/passwd的含有ftp的行以及其后面的5行

#-B是显示匹配行和它前面的n行
grep -B 5 ftp /etc/passwd  # 输出/etc/passwd的含有ftp的行以及其前面的5行

#-C是匹配行和它前后各n行
grep -C 5 ftp /etc/passwd  # 输出/etc/passwd的含有ftp的行以及其前后5行

3.接正则

  • $:表示以***结尾
# 过滤出/etc/passwd中以bash结尾的行并且输出
grep "bash$" /etc/passwd
  • ^:表示以***开头
# 过滤出/etc/passwd中以 r,m,f 开头的行并输出
grep "^[rmf]" /etc/passwd
grep "^r|^m|^f" /etc/passwd

# 输出/etc/selinux/config中的有效行(即不以#开头的行)
grep -v "^#" /etc/selinux/config 
  • [ ]:表示字符集合
# 输出/var/log/messages里Jun 30 14:15:00~14:19:59这个时间段的日志
grep "^Jun 30 14:1[5-9]:[0-5][0-9]" /var/log/messages
  • 用正则匹配ip地址( grep -E 和 egrep 的效果一致 )
# 过滤access.log日志中ip地址并且按出现次数从大到小进行排序统计
cat access.log |grep -Eo "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}"|sort|uniq -c|sort -nr           
Logo

更多推荐