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

[经验分享] linux文本处理三剑客之grep家族及其相应的正则表达式使用详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-10 17:00:13 | 显示全部楼层 |阅读模式
                      一、Linux文本处理三剑客、grep家族和正则表达式介绍
     Linux上文本处理三剑客:
        grep(egrep, fgrep):文本搜索工具;基于”pattern(过滤条件)“对目标文本进行逐行搜索操作;
        sed:Stream Editor,流编辑器行编辑工具;文本编辑工具;
        awk:GNU awk,文本格式化工具;文本报告生成器;


    grep家族:

        grep: Global search REgular expression and Print out the line,支持使用基本正则表达式;
        egrep:支持使用扩展正则表达式,相当于grep -E;
        fgrep:不支持使用正则表达式(本文暂不介绍);
    作为Linux文本处理三剑客之一的grep家族,是我们经常会使用到的文本搜索工具。grep、egrep是基于“pattern(过滤条件)”对目标文本进行逐行匹配,然后输出符合条件的行内容。“pattern(过滤条件)”由文本字符及相应的正则表达式元字符所组成。


    正则表达式:由一些特殊字符和文本字符所编写,其中一些字符所表示意义并不是其字面意义,而是表示控制或通配功能。
    正则表达式分为两类:
        基本正则表达式:BRE
        扩展正则表达式:ERE
    正则表达式引擎:利用正则表达式模式分析所给定的文本的程序。


二、grep命令和基本正则表达式
    grep  [OPTIONS]  PATTERN  [FILE...]
    常用选项:
        --color=auto:对匹配到的文本着色后高亮显示(centos7默认对grep、egrep、fgrep已经设置参数)
    wKiom1beyLuRMMFtAAAQZVWK1gc343.jpg
        -i:忽略字符大小写;
         wKioL1bezE3wNDzgAAAPYh00kF0797.jpg
        -o:仅显示匹配 到的文本自身;
         wKioL1bez-mzez_UAAAKXmUj8Lg446.jpg
          -v, --invert-match:反向匹配;
         wKioL1bez-mzP-_iAAAK-DR3Snc229.jpg
        - q, --quiet, --silient:静默模式,不输出任何信息;
         wKiom1bez2jTHxdyAAALH3fZKDk922.jpg
        -e PATTERN, --regexp=PATTERN:多模式机制;
    wKioL1bhKmTxReygAAAIj8-jXt4813.jpg
        -f FILE, --file=FILE:FILE为每行包含了一个pattern的文本文件,即grep script;
    wKiom1bhKeHDBASgAAALpQP9B1A804.jpg

        -A NUM, --after-context=NUM:显示查找内容每行的下NUM行
    wKiom1bhLWaRajx7AABDmBLGYSw165.jpg
        -B NUM, --before-context=NUM:显示查找内容每行的上NUM行
    wKioL1bhLevBhaD7AAAjTh36yTc900.jpg

        -C NUM, -NUM, --context=NUM:显示查找内容每行的上下NUM行
    wKiom1bhLWeSq4j-AAAzpLQ8G-k196.jpg
        -E, --extended-regexp:支持使用扩展正则表达式
        -F, --fixed-strings:支持使用固定字符串,不支持正则表达式,相当于fgrep;
        -G, --basic-regexp:支持使用基本正则表达式;
        -P, --perl-regexp:支持使用pcre正则表达式;



    基本正则表达式元字符:
        字符匹配:
             .:匹配任意单个字符;
         wKioL1bg6QWR0fRfAAAOfa24kQ8974.jpg
            [ ]:匹配范围内的任意单个字符;

         wKiom1bg6IHAionAAAAF23vhOnc009.jpg
            [^ ]:匹配范围外的任意单个字符;
         wKioL1bg6QahDgF0AAAG1mVJsac292.jpg
            [[:digit:]]:任意数字;
            [[:lower:]]:任意小写字母;
            [[:upper:]]:任意大写字母;
            [[:alpha:]]:任意字母;
            [[:alnum:]]:任意的字母和数字;
            [[:space:]]:空白字符;
            [[:blank:]]:空格和Tab键等;
            [[:punct:]]:所有的标点符号。



        匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;
            *:匹配其前面的字符任意次;0,1,多次;
         wKioL1bg8XWRFBYLAAAGpG97dPQ111.jpg
            .*:匹配任意长度的任意字符;
         wKiom1bg8gyCmYa6AAANHYOApYM169.jpg
            \?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
         wKiom1bg8PLzR44xAAAI5iKHGkU486.jpg
            \+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;
         wKiom1bg88OyvFXxAAAIe0R1frk115.jpg
            \{m\}:匹配其前面的字符m次;
         wKiom1bg88TytBSHAAAKaVHYWW8226.jpg
            \{m,n\}:匹配其前面的字符至少m次,至多n次;
         wKiom1bg9YSDjrmYAAARSPzO-HI155.jpg
            \{0,n\}:匹配其前面的字符至多n次
         wKiom1bg9YXx1vEqAAAHQ0UsCLs355.jpg
            \{m,\}:匹配其前面的字符至少m次
         wKioL1bg9gqxcrOAAAAGLf3xXWE619.jpg

       位置锚定:
            ^:行首锚定;用于模式的最左侧;
            $:行尾锚定;用于模式的最右侧;
            ^PATTERN$:用于PATTERN来匹配整行;
         wKioL1bg-R6gw5zDAAAT5IP1Cww254.jpg

            ^$:空白行;
            ^[[:space:]]*$:空行或包含空白字符的行;



            单词:非特殊字符组成的连续字符(字符串)都称为单词;
            \< 或 \b:词首锚定,用于单词模式的左侧;
            \> 或 \b:词尾锚定,用于单词模式的右侧;
            \<PATTERN\>:匹配完整单词;
         wKiom1bg-kzwywogAAAWg6-WL48275.jpg


        分组及引用

          \(PATTERN\):将此PATTERN匹配到的字符当作一个不可侵害整体进行处理。
           Note:分组括号中的模式匹配到的字符会被正则表达式引擎自动记录于内部的变量中,这些变量是\1, \2, \3, ...

                        pat1\(pat2\)pat3\(pat4\(pat5\)pat6\)

            \n:模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;(不是模式,而是模式匹配的结果)

            \1:第一组括号中的pattern匹配到的字符串;
            \2:第二组括号中的pattern匹配到的字符串;
            ……
            后向引用:引用前面的分组括号中的模式所匹配到的字符;
         wKioL1bg_hCwl6PsAAANOwPRgaQ119.jpg

三、egrep命令和扩展正则表达式
    egrep [OPTIONS] PATTERN [FILE...]
    注:常用选项与grep一致,参考上述grep的常用选项即可。



    扩展正则表达式的元字符:
        字符匹配:
            .:任意单个字符
         wKioL1bhBFfjgnrhAAAM5pN0NAc553.jpg
            [ ]:范围内的任意单个字符
         wKiom1bhA9PQnDLVAAAOQ9L79VY246.jpg
            [^ ]:范围外的任意单个字符
         wKiom1bhA9SBqghgAAAOwmcC9iU409.jpg

        匹配次数:
            *:匹配前面的字符任意次(0,1或多次);
            ?:匹配前面的0次或1次,即前面的字符可有可无;
            +:匹配前面的字符至少1次;
            {m}:其前面的字符出现m次,m为非负整数;
            {m,n}:其前面的字符出现m次,m为非负整数;
            {0,n}:匹配其前面的字符至多n次;
            {m,}:匹配其前面的字符最少m次;
        注:使用方式与基本正则表达式相同,参考上述基本正则表达式的使用介绍即可。



        位置锚定:

            ^:行首锚定;用于模式的最左侧,^PATTERN
            $:行尾锚定;用于模式的最右侧,PATTERN$
            \<, \b:词首锚定,用于单词模式的左侧,格式为\<PATTERN, \bPATTERN
            \>, \b:词尾锚定,用于单词模式的右侧,格式为PATTERN\>, PATTERN\b

        注:使用方式与基本正则表达式相同,参考上述基本正则表达式的使用介绍即可。

        分组及引用:
            (PTARRERN):将此PATTERN匹配到的字符当作一个不可侵害整体进行处理。
            Note:分组括号中的模式匹配到的字符会被正则表达式引擎自动记录于内部的变量中,这些变量是\1, \2, \3, ...
                        pat1\(pat2\)pat3\(pat4\(pat5\)pat6\)
            \n:模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;(不是模式,而是模式匹配的结果)
            \1:第一组括号中的pattern匹配到的字符串;
            \2:第二组括号中的pattern匹配到的字符串;
            ……
            后向引用:引用前面的分组括号中的模式所匹配到的字符;

        注:使用方式与基本正则表达式相同,参考上述基本正则表达式的使用介绍即可。

         或者:
                a|b:a或者b
                C|cat:表示C或cat
                (C|c)at:表示Cat或cat
                   


运维网声明 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-189083-1-1.html 上篇帖子: jmeter在linux上启动报错:连接拒绝 下篇帖子: Linux服务器上监控网络带宽的18个常用命令 linux 三剑客 表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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