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

[经验分享] grep文本处理工具、正则表达式

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-4 09:32:41 | 显示全部楼层 |阅读模式
grep是一个文本检索工具,号称linux文本处理三大剑客之一,通常会结合正则表达式使用,支持基本正则表达式和扩展的正则表达式,功能很强大,给我们搜索文本带来了很大的便利,默认情况下,它是贪婪模式,能匹配多长就匹配多长,会将匹配到的整行显示出来。另外两大剑客:sed、awk。
    grep常用选项:

    grep -i:忽略大小写

     [iyunv@localhost ~]# grep -i tom /etc/passwd
       tom:x:506:506::/home/tom:/bin/bash
       Tom:x:507:507::/home/Tom:/bin/bash
    grep -o:仅显示匹配到的文本

     [iyunv@localhost ~]# grep -o root /etc/passwd
       root
       root
    grep --color:对匹配到的文本进行高亮显示
      [iyunv@localhost ~]# grep --color=auto tom /etc/passwd
      tom:x:506:506::/home/tom:/bin/bash
    grep -v:显示匹配文本以外的文本
      [iyunv@localhost ~]# grep -v tom /etc/passwd |tail -2
      named:x:25:25:Named:/var/named:/sbin/nologin
      Tom:x:507:507::/home/Tom:/bin/bash
    grep -e:表示逻辑关系“或”
      [iyunv@localhost ~]# grep -e tom -e Tom /etc/passwd
      tom:x:506:506::/home/tom:/bin/bash
      Tom:x:507:507::/home/Tom:/bin/bash
    grep -q:静默模式,无论匹配到还是没有匹配到文本都不显示
      [iyunv@localhost ~]# grep -q tom /etc/passwd
      [iyunv@localhost ~]#
    grep -A #:显示模式匹配到的文本,并显示后#行
      [iyunv@localhost ~]# grep -A 1 named /etc/passwd
      named:x:25:25:Named:/var/named:/sbin/nologin
      tom:x:506:506::/home/tom:/bin/bash
   grep -B #:显示模式匹配到的文本,并显示前#行
      [iyunv@localhost ~]# grep -B 1 named /etc/passwd
      mage:x:505:505::/home/mage:/bin/bash
      named:x:25:25:Named:/var/named:/sbin/nologin
    grep -C #:显示模式匹配到的文本,并显示前后各#行
      [iyunv@localhost ~]# grep -C 1 named /etc/passwd
      mage:x:505:505::/home/mage:/bin/bash
      named:x:25:25:Named:/var/named:/sbin/nologin
      tom:x:506:506::/home/tom:/bin/bash
    grep -E:支持扩展的正则表达式

    grep基于模式匹配,默认支持基本的正则表达式,可用-E选项支持扩展的正则表达式,相当于egrep。

    正则表达式有很多元字符组成,有基本的正则表达式BRE和扩展的正则表达式ERE。

    基本的正则表达式元字符:BRE

    字符匹配:

    .:匹配任意单个字符

    【】:匹配范围内任意单个字符

    【^】:匹配范围外任意单个字符tt

    【:digit:】:::所有数字    【:alnum:】:所有数字和字母

    【:lower:】:所有小写字母    【:space:】:空白字符

    【:punct:】:所有标点符号    【:alpha:】:所有字母

    【:upper:】:所有大写字母
      [iyunv@localhost ~]# grep T.m /etc/passwd
      Tom:x:507:507::/home/Tom:/bin/bash

      [iyunv@localhost ~]# grep [Tt] /etc/passwd |tail -2
      tom:x:506:506::/home/tom:/bin/bash
      Tom:x:507:507::/home/Tom:/bin/bash
    次数匹配:

    *:匹配前面字符任意次

    .*:匹配任意长度任意字符

    \+:匹配前面字符至少一次

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

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

    \{m,n\}:匹配前面字符至少m次,至多n次

    \{m,\}:匹配前面字符至少m次

    \{,n\}:匹配前面字符至多n次
      [iyunv@localhost ~]# grep "x*y" hadop
      xxy
      xy
      yy   匹配前面的x任意次,0次也匹配

      [iyunv@localhost ~]# grep "x\+y" hadop
      xxy
      xy    匹配前面的x至少一次

      [iyunv@localhost ~]# grep "x\{2\}y" hadop
      xxy    匹配前面的x两次,精确匹配

    位置锚定:

    ^:行首锚定

    $:行尾锚定

    ^$:空行

    ^PATTERN$:用于模式匹配整行

    ^*$:非空白行

    \<或\b:词首锚定

    \>或\b:词尾锚定

    \<PATTERN\>:锚定整个单词
      [iyunv@localhost ~]# grep "^root" --color=auto /etc/passwd
      root:x:0:0:root:/root:/bin/bash

      [iyunv@localhost ~]# grep "/sbin/nologin$" /etc/passwd |head -2
      bin:x:1:1:bin:/bin:/sbin/nologin
      daemon:x:2:2:daemon:/sbin:/sbin/nologin
    分组:

    \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,分组匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量命名为:\1,\2,\3....可以进行后向引用,引用前面分组中模式所匹配到的字符

    \1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符.

    \(string1\+\(string2\)*\)
    \1:string1\+\(string2\)*  
    \2:string2
      [iyunv@localhost ~]# grep "\(r..t\).*\1" --color=auto /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      前面匹配到root,记录在变量\1中,在进行后面引用,在本行中,在有root出现才会被模式匹配



      [iyunv@localhost ~]# grep "\(r..t\)" --color=auto /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      operator:x:11:0:operator:/root:/sbin/nologin
      ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
      如果只进行分组,不进行后向引用,结果就成这样,只要被分组匹配到都会显示出来


    扩展正则表达式元字符:ERE

    扩展正则表达式元字符和基本正则表达式相比,更简洁,字符匹配、位置锚定,元字符都一样。只有次数匹配和分组元字符稍有偏差。

    次数匹配:

    *:匹配前面字符任意次

    .*{}:匹配任意长度任意字符

    +:匹配前面字符至少一次

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

    {m}:匹配前面字符m次
    {m,n}:匹配前面字符至少m次,至多n次

    {,n}:匹配前面字符至多n次

    {m,}:匹配前面字符至少m次

    分组:()
   



运维网声明 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-239056-1-1.html 上篇帖子: linux中RAID详解 下篇帖子: 入侵检测系统 snort 安装配置 表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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