这一小节重点讲解了grep和egrp的用法,这个命令在linux当中用的非常频繁,需要熟练掌握,下一小节会需要结合grep/egrep来详细讲解正则表达式的使用方法。

文章目录

  • 前言
  • 一、Grep详解
    • 1.介绍
    • 2.常用选项
    • 3.Grep示例
    • 4.egrep详解
  • 总结

前言

本小节会先讲解grep的使用方法,下一章节再结合grep命令详细讲解如何用正则表达式处理文本。


一、Grep详解

--color=auto或者 --color 表示对匹配到的文本高亮显示
-i 搜索的时候忽略大小写
-n 显示结果所在行号
-c 统计匹配到的行数。这里指定是总行数,有可能不是总次数
-o 不显示整行,只显示符合条件的字符串,这些字符串单独显示一行
-R 递归匹配,会将当前目录和子级目录的文本都进行匹配
-v 反向匹配,显示不包含关键字的行
-w 匹配整个单词,如果是字符串中包含这个单词,则不匹配
-An 在输出的时候包含结果所在行之后的指定行数,这里指之后的n行,A:after
-Bn 在输出的时候包含结果所在行之前的指定行数,这里指之前的n行,B:before
-Cn 在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的n行,C:context
-e 实现多个选项匹配,或的关系
-q 静默模式,不输出任何信息,只会显示有没有匹配到,不会显示匹配的内容,使用此命令后,然后输入"echo $?"查看是否匹配到,0表示匹配到,1表示没有匹配到。
-E 使用扩展正则表达式,而不是基本正则表达式,在使用"-E"选项时,相当于使用egrep。

1.介绍

使用grep命令在文本中查找指定的字符串。它能够支持正则表达式进行全局搜索,并将搜索出的结果以行的形式打印。

2.常用选项

![在这里插入图片描述](https://img-blog.csdnimg.cn/6d555bbe509946ff819631824704e47e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pWw5ZOl,size_20,color_FFFFFF,t_70,g_se,x_16

3.Grep示例

1. 高亮显示(带颜色显示)
默认情况下会将过滤的内容用彩色标记,只是因为调用grep的时候,其实调用的是它别名。grep --color=auto

[root@zaishu ~]# grep “mysqld” /var/log/messages
Oct 22 11:00:07 zaishu mysqld: Starting MySQL… SUCCESS!
Oct 26 09:31:58 zaishu mysqld: Starting MySQL… SUCCESS!
Oct 26 09:33:23 zaishu mysqld: Starting MySQL… SUCCESS!
Oct 29 09:02:33 zaishu mysqld: Starting MySQL… SUCCESS!

查看当前已经设置的别名,这就是上面例子会高亮显示的原因
[root@zaishu ~]# alias
alias cp=‘cp -i’
alias egrep=‘egrep --color=auto’
alias fgrep=‘fgrep --color=auto’
alias grep='grep --color=auto’
alias l.=‘ls -d .* --color=auto’
alias ll=‘ls -l --color=auto’
alias ls=‘ls --color=auto’
alias lt=‘ls -lt’
alias mv=‘mv -i’
alias rm=‘rm -i’
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde’

2. 忽略大小写
-i参数的作用是忽略关键字的大小写,经常用到

[root@zaishu ~]# grep -i "start" /var/log/messages
Oct 22 10:58:24 zaishu systemd: **Started** Session 6 of user root.
Oct 22 10:59:44 zaishu systemd: **Started** Authorization Manager.
Oct 22 10:59:44 zaishu NetworkManager[537]: <info>  [1634871584.5245] NetworkManager (version 1.18.8-1.el7) is starting... (for the first time)
Oct 22 10:59:44 zaishu systemd: Started Network Manager.
Oct 22 10:59:44 zaishu systemd: Starting Network Manager Wait Online...
Oct 22 10:59:44 zaishu systemd: Starting Hostname Service...
Oct 22 10:59:44 zaishu systemd: Started Hostname Service.
Oct 22 10:59:44 zaishu systemd: Starting Network Manager Script Dispatcher Service...
Oct 22 10:59:44 zaishu systemd: Started Network Manager Script Dispatcher Service.
...

3. 显示结果所在行号
-n:显示结果所在行号

[root@zaishu ~]# grep -n "mysqld" /var/log/messages
135:Oct 22 11:00:07 zaishu mysqld: Starting MySQL................ SUCCESS!
736:Oct 26 09:31:58 zaishu mysqld: Starting MySQL....... SUCCESS!
891:Oct 26 09:33:23 zaishu mysqld: Starting MySQL...... SUCCESS!
3578:Oct 29 09:02:33 zaishu mysqld: Starting MySQL.......... SUCCESS!

4. 统计匹配到的行数
-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数

[root@zaishu ~]# grep -c "mysqld" /var/log/messages
4

5. 只显示符合条件的字符串
-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行

[root@zaishu ~]# grep -o "mysqld" /var/log/messages
mysqld
mysqld
mysqld
mysqld

6. 反向查询,反向匹配
-v:输出不带关键字的行(反向查询,反向匹配)

[root@zaishu ~]# cat shu
sadfasdf
www.zaishu.cn
www.zaishu.cn
www.ishu.n
asdfsdfwww.zaishu.cn[root@zaishu ~]# grep -v "zaishu" shu
sadfasdf
www.ishu.n

7. 匹配单词,完全匹配
-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配

[root@zaishu ~]# cat zaishu
hello world
helloworld
[root@zaishu ~]# grep -w "hello" zaishu
hello world

8. 在输出的时候包含结果所在行之后的指定行数
-An:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
打印包含关键字的行,并且将后面指定的行数也打印出来

[root@prometheus log]# grep -A5 "prometheus.service failed" messagesOct 29 07:06:30 prometheus systemd: prometheus.service failed.
Oct 29 07:06:31 prometheus systemd: Started Postfix Mail Transport Agent.
Oct 29 07:06:31 prometheus systemd: prometheus.service holdoff time over, scheduling restart.
Oct 29 07:06:31 prometheus systemd: Stopped The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Started The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Failed at step USER spawning /usr/bin/prometheus: No such processOct 29 07:06:31 prometheus systemd: prometheus.service failed.
Oct 29 07:06:31 prometheus systemd: prometheus.service holdoff time over, scheduling restart.
Oct 29 07:06:31 prometheus systemd: Stopped The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Started The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Failed at step USER spawning /usr/bin/prometheus: No such process
Oct 29 07:06:31 prometheus systemd: prometheus.service: main process exited, code=exited, status=217/USER
....

9. 在输出的时候包含结果所在行之前的指定行数
-Bn:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
打印包含关键字的行,并且将之前指定的行数也打印出来

[root@prometheus log]# grep -B5 "prometheus.service failed" messages
Oct 29 07:06:30 prometheus systemd: Stopped The Prometheus monitoring system and time series database.
Oct 29 07:06:30 prometheus systemd: Started The Prometheus monitoring system and time series database.
Oct 29 07:06:30 prometheus systemd: Failed at step USER spawning /usr/bin/prometheus: No such process
Oct 29 07:06:30 prometheus systemd: prometheus.service: main process exited, code=exited, status=217/USER
Oct 29 07:06:30 prometheus systemd: Unit prometheus.service entered failed state.
Oct 29 07:06:30 prometheus systemd: prometheus.service failed.Oct 29 07:06:31 prometheus systemd: Stopped The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Started The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Failed at step USER spawning /usr/bin/prometheus: No such process
Oct 29 07:06:31 prometheus systemd: prometheus.service: main process exited, code=exited, status=217/USER
Oct 29 07:06:31 prometheus systemd: Unit prometheus.service entered failed state.
Oct 29 07:06:31 prometheus systemd: prometheus.service failed.Oct 29 07:06:31 prometheus systemd: Stopped The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Started The Prometheus monitoring system and time series database.
Oct 29 07:06:31 prometheus systemd: Failed at step USER spawning /usr/bin/prometheus: No such process
Oct 29 07:06:31 prometheus systemd: prometheus.service: main process exited, code=exited, status=217/USER
Oct 29 07:06:31 prometheus systemd: Unit prometheus.service entered failed state.
Oct 29 07:06:31 prometheus systemd: prometheus.service failed.
....

10. 在输出的时候包含结果所在前后的指定行数
-Cn:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context
打印包含关键字的行,并且将前后指定的行数也打印出来

[root@prometheus log]# grep -C2 "prometheus.service failed" messages
Oct 29 07:06:30 prometheus systemd: prometheus.service: main process exited, code=exited, status=217/USER
Oct 29 07:06:30 prometheus systemd: Unit prometheus.service entered failed state.
Oct 29 07:06:30 prometheus systemd: prometheus.service failed.
Oct 29 07:06:30 prometheus systemd: Started OpenSSH server daemon.
Oct 29 07:06:30 prometheus node_exporter: level=info ts=2021-10-28T23:06:30.468Z caller=node_exporter.go:176 msg="Starting node_exporter" version="(version=1.0.0-rc.0, branch=HEAD, revision=ef7c05816adcb0e8923defe34e97f6afcce0a939)"Oct 29 07:06:31 prometheus systemd: prometheus.service: main process exited, code=exited, status=217/USER
Oct 29 07:06:31 prometheus systemd: Unit prometheus.service entered failed state.
Oct 29 07:06:31 prometheus systemd: prometheus.service failed.
Oct 29 07:06:31 prometheus systemd: prometheus.service holdoff time over, scheduling restart.
Oct 29 07:06:31 prometheus systemd: Stopped The Prometheus monitoring system and time series database.
....

11. 包含多个关键字的行
-e:实现多个选项的匹配,逻辑or关系
包含关键字root或者sshd的行

[root@prometheus ~]# grep -e "sshd" -e "root" shu.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

12. 只输出有没有匹配到
-q:静默模式,不输出任何信息,当只想得到有没有匹配到,不需要匹配到的内容,可以使用-q 指定关键字。
接着使用"echo $?" 查看是否匹配到,0表示匹配到,1表示没有匹配到。

[root@prometheus ~]# grep -e "oracle" -e "root" shu.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin[root@prometheus ~]# grep -q "root" shu.txt
[root@prometheus ~]# echo $?
0
[root@prometheus ~]# grep -q "oracle" shu.txt
[root@prometheus ~]# echo $?
1

13.指定目录查找
-R : 递归查询,里面的子目录一并搜索
[root@prometheus ~]# grep -R “abc” zaishu/
zaishu/xx:abcc
zaishu/xx:abc
zaishu/xx:abcabc
zaishu/yum.log:abc

14.排除指定目录:
-exclude-dir: 排除指定目录

[root@prometheus zaishu]# grep -R "abc" --exclude-dir=./shu/ ./*
./xx:abcc
./xx:abc
./xx:abcabc
./yum.log:abc//排除子目录./zbx-api/

或者用多次查找的方式得到结果

[root@prometheus zaishu]# grep -R "abc" ./* |grep -v "shu"
./xx:abcc
./xx:abc
./xx:abcabc
./yum.log:abc

4.egrep详解

egrep是grep的扩展,支持更多的re元字符.egrep执行效果与"grep-E"相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。
对于egrep,只需要记住以下跟grep用法不一样的地方即可:

+ 匹配一个或多个先前的字符。如:’[a-z]+x’,匹配一个或多个小写字母后跟able的串,如lovex,enx,disx等。
? 匹配零个或多个先前的字符。如:'gr?p’匹配gr后跟一个或没有字符,然后是p的行。
a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed
() 分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

egrep示例

[root@prometheus ~]# grep "abc+" xx   //这个+只是字符串当中的字符[root@prometheus ~]# grep "abc\+" xx  //这个+需要接\ 表示它是正则表达式的符号
abcc
abc
abcabc[root@prometheus ~]# egrep "abc+" xx  //用egrep的时候
abcc
abc
abcabc
[root@prometheus ~]# grep -o "root|oracle" shu.txt  //这个| 普通字符
[root@prometheus ~]# egrep -o "root|oracle" shu.txt  //这个| 就是表示或的意思
root
root
root
root

总结

这一小节重点讲解了grep和egrp的用法,这个命令在linux当中用的非常频繁,需要熟练掌握,下一小节会需要结合grep/egrep来详细讲解正则表达式的使用方法。

9.grep/egrep详解相关推荐

  1. 正则,grep命令详解

    正则表达式和grep.vim.awk.sed等的关系: 正则表达式是一种方法,相当于一种工艺,grep等命令相当于是一个具体的加工机器,机器在加工产品的时候,采用这种方法. 命令是怎么执行的: sel ...

  2. linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解

    需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...

  3. grep命令详解(常用参数)

    grep命令详解: grep版本: # grep -V grep (GNU grep) 2.20 ... grep --help(或者"man grep")查看详细语法及参数 语法 ...

  4. linux命令ps -aux|grep xxx详解

    linux命令ps -aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大 ...

  5. linux xxx命令,linux命令ps aux|grep xxx详解

    对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在运 ...

  6. grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)

    文章目录 20221011 grep如何匹配多个标志? 20230412 grep -q(`Use grep -q instead of comparing output with [ -n .. ] ...

  7. ps aux|grep xxx详解

    linux命令ps aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的 ...

  8. linux中grep命令返回值,grep命令详解

    如果你是一个新手,请从头阅读这篇文章,如果你只是忘记了grep命令的一些常用选项,直接查看文章尾部的总结部分即可. 先说说grep命令能做什么? 我们可以使用grep命令在文本中查找指定的字符串,就像 ...

  9. grep mysql_详解grep获取MySQL错误日志信息的方法

    为方便维护MySQL,写了个脚本用以提供收集错误信息的接口.这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径. 以下是全部相关代码: #!/usr/b ...

最新文章

  1. 在 react 里使用 antd
  2. 植树节特别活动:合种樟子松/华山松/云杉/胡杨
  3. 如何独立实现一个基于知识图谱的问答系统
  4. 统一配置数据库连接符的方法
  5. linux下的C语言开发(信号处理)
  6. 计算机组成原理完整学习笔记(二):系统总线
  7. 利用css实现返回顶部按钮
  8. 零基础如何入门MATLAB(适用于所有编程语言)?(建议收藏)
  9. 小米集团招股说明书披露小米专利概况
  10. 怎样编辑pdf文件?手把手教你如何使用PDF编辑器
  11. 感应(异步)电机磁场定向控制速度环PI控制参数设计
  12. [转载]Sandbox——沙箱技术,来自chromium开发文档
  13. 微信小程序 加载 fbx 模型
  14. python format( )强力格式化
  15. android+自定义dns解析,安卓手机玩dnsmasq 搭建自己的DNS服务器
  16. 用python把图片换成蓝底_Python给照片换底色(蓝底换红底)
  17. Hastelloy C22合金板材 圆钢 无缝管
  18. 分享一个android手机开不了机的问题
  19. 微信公众号开发002-微信网页授权
  20. 微信 mac 版 3.* beta 可以查看朋友圈了

热门文章

  1. android的卡怎么打开不了图片,手机sim卡读不出来怎么办【图文教程】
  2. 腾讯文档收集结果从Excel中导出图片方法
  3. JQuery判断邮箱格式问题
  4. filemaker server php,FileMaker Server 18
  5. 2022-2028年中国微波车辆检测器行业投资潜力研究及发展趋势预测报告
  6. windows比cmd更强大的 WMIC命令使用详解
  7. DRV8812芯片被国产激光打印机驱动芯片TMI8262取代
  8. Java基础面试题(1)
  9. DMG Canvas for mac(DMG镜像制作工具)
  10. 建设营销型网站这6个要点要注意