设为首页 收藏本站
查看: 456|回复: 0

[经验分享] 浅谈我对grep跟egrep的简单认识

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-7 16:13:24 | 显示全部楼层 |阅读模式
㈠首先我们要明白grep和egrep的干什么用的

         grep:global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它只能用基本的正则表达式来搜索文本,并把匹配的行打印出来。

        egrep:命令等同于grep -E,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。

为了使大家看的明白我就使用大白话:

       grep命令的使用格式:grep+选项+'某种模式'+你索要查询的内容路径:(选项可以忽略)

①例:我要查找/etc/rc.d/rc.sysinit 有boot字符的行 :grep --colour=auto 'boot' /etc/rc.d/rc.sysinit

          为了我们便于查看,所以我 使用了--colour=auto的选项,就是把结果以不同颜色显示出来。大家可以试着去查看下效果。

         那么grep常用选项有那些?下面我们介绍下grep的常用选项

                ⑴  -v : 取反,就是显示出与查找条件相反的结果

②例我要查找/etc/passwd中以/bin/bash结尾的行:

           [iyunv@localhost ~]# cat /etc/passwd | grep '/bin/bash$'
           root:x:0:0:root:/root:/bin/bash

           那么不以/bin/bash结尾的呢?

           [iyunv@localhost ~]# cat /etc/passwd | grep -v '/bin/bash$' | head -1
           bin:x:1:1:bin:/bin:/sbin/nologin

                 ⑵-i:忽略大小写

③例:我们拿有-i 跟没-i做比较 例如查找/etc/rc.d/rc.sysinit中有s的字符 因为我黏贴没有颜色显示效果,所以我只把命令给大家敲出来

              [iyunv@localhost ~]# grep --colour=auto 's' /etc/rc.d/rc.sysinit  

              [iyunv@localhost ~]# grep -i --colour=auto 's' /etc/rc.d/rc.sysinit     

              ⑶--colour颜色显示后面常跟auto

              ⑷-A n :显示匹配到所在行的后面n行

④例      [iyunv@localhost ~]# grep -A1 '/bin/bash$' /etc/passwd
              root:x:0:0:root:/root:/bin/bash
              bin:x:1:1:bin:/bin:/sbin/nologin

              ⑸-Bn:显示匹配到所在行前面的n行

              ⑹-Cn:显示匹配到所在行的前后各n行

              ⑺-n  :给显示匹配的行以行号

⑤例      [iyunv@localhost ~]# grep -n -A1 '/bin/bash$' /etc/passwd
              1:root:x:0:0:root:/root:/bin/bash
              2-bin:x:1:1:bin:/bin:/sbin/nologin

              ⑻-c:统计匹配到字符的次数

⑥例     [iyunv@localhost ~]# grep -c 's' /etc/rc.d/rc.sysinit
              320

当然还有好多选项,我们就介绍几个大家可能常用到的。大家也可能注意到了我命令里面字符串都用了单引号所以需要大家注意在正则表达式里如果有字符串则需要用单或双引号把它给引起来。如果是变量例如$hh等那么这个变量还有正则对它所做的一些正则表达式的元字符都要用双引号囊括起来。

㈡那么我们这里还需要知道一个知识点,什么是正则表达式?

正则表达式的基本定义: 正则表达是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式通常被用来检索、替换那些符合某个模式的文本。

那么常用的正则表达式的元字符都有那些?下面我们给大家一一介绍:

         按功能分类:

         一:做字符匹配的元字符:

         1:.(就是一个点)匹配任意字符

        2:[ ]匹配指定范围里面的任意单个字符

       3:[^ ]匹配指定范围外的任意单个字符(就是除了中括号里面的不能用,别的你随便)

       4:[[:space:]] :空白字符

       5:[[:lower:]]:匹配所有的小写字母

       6:[[:upper:]]:匹配所有的大写字母

       7:[[:alpha:]]:匹配所有的大小写字母

       8:[[:digit:]]:匹配所有的数字

       9:[[:alnum:]]:匹配所有的数字和大小写字母

     10:[[:punct:]]:所有标点符号

    二:做次数匹配:

      1:*:任意次

     2:.*(点*)任意字符任意次

     3:\?:前面的字符0次或1次

   4:\{m\}:匹配m次

   5:\{m,n\}:至少m至多n

     6:\{m,\} :至少m次

   7:\{0,n\}:至多n次

三:做位置锚定:

   1:^ :锚定行首

   2:$ :锚定行尾

   3:^$ :空白行

四:单词的锚定:

   1:\<:锚定词首(或者也可以用 \b)例如:以#号开头的行:^# 或\b #

     2:\>:锚定词尾(也可以用#\b)

     但是两者是有写区别的例如

⑦例:[iyunv@localhost ~]# grep '\b #' /etc/rc.d/rc.sysinit
          #remount /dev/shm to set attributes from fstab #669700
          #remount /proc to set attributes from fstab #984003

         [iyunv@localhost ~]# grep '^#' /etc/rc.d/rc.sysinit
         #!/bin/bash
         #
         #remount /dev/shm to set attributes from fstab #669700
         #remount /proc to set attributes from fstab #9

      注意:字符跟\b之间是有空格的\b只会匹配出#头后面紧跟字符的行

五:分组:

    1:\(\):分组

⑧例:查找/etc/rc.d/rc/sysinit中sys一组的字符行

[iyunv@localhost ~]# grep --colour=auto '\(sys\)' /etc/rc.d/rc.sysinit

  2:\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容

         \(a.b\)xy\1  就是匹配一个a b 之间有任意一个单词的 xy后面跟a.b一样的字符

        例如acbxy  那匹配结果的单词就是acbxyacb  \1就是把括号内的东西在cp1份放到xy后面

以上就是正则表达式的元字符,如有不合理的地方请大家雅正。



介绍完了grep我们简单说说egrep,egrep其实就是扩展正则表达式grep -E就相当于egrep

扩展表达式其实就是比正则表达式稍微有一点点的改变,下面我只列出与grep不一样的地方

字符匹配:



   ?:匹配前面的字符0或1次

   +:匹配前面的字符至少1次

{m}:匹配前面的字符m次

{m,n}:匹配至少m次,至多n次

{m,}:至少m次

{0,n}:至多n次

分组:

    ():分组   

      | :或者 ,a|b a或者b (a|b)



以上就是我对grep跟egrep的简单认识,与大家分享下,欢迎大家雅正及反馈。谢谢!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-15636-1-1.html 上篇帖子: 查看系统中磁盘(加磁盘阵列)空间的使用情况(AIX、Linux... 下篇帖子: Linux 指定动态库路径
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表