Linux三剑客之grepegrep及正则表达式使用详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux三剑客之grepegrep及正则表达式使用详解相关的知识,希望对你有一定的参考价值。


    Linux三剑客是Linux中非常强悍的文本处理工具,掌握三剑客,文处理已想必会有三剑在手,天下我有的感觉,三剑客之grep家族擅长文本搜索,支持以正则表达式进行文本搜索,使得grep非常强悍,以下内容就grep,egrep和正则表达式展开


Linux文本工具三剑客:
        grep、egrep、fgrep:文本搜索工具

        sed:流编辑器,也是行编辑器

        awk:文本格式化工具,文版报告生成器

    
正则表达式:是由一类字符所书写出的模式(pattern)

        作用:配合支持使用正则表达式的文本搜索工具进行文本过滤

        元字符:类似通配符,不表示字符本身的意义,用于额外功能性的描述

        分类:基本正则表达式和扩展正则表达式



基本正则表达式(BRE)


        字符匹配:
                .:任意单个字符

                [ ]: 指定范围内的任意单个字符

                [0-9],[[:digit:]]:所有数字

                [a-z],[[:lower:]]:小写字母

                [A-Z],[[:upper:]]:大写字母

                [[:alpha:]]:所有大小写字母

                [[:alnum:]]:数字及所有大小写字母

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

                [[:punct:]]:特殊字符

                [^]: 指定范围外的任意单个字符

        次数匹配:对匹配符前一个字符的出现次数做匹配
                *: 前一个字符出现任意次数,如:a*,指a可以出现任意次数,包括0次

                \?:前一个字符0或1次

                \+:前一个字符出现至少1次

                \{m\}: 前一个字符出现m次,作精确匹配

                \{m,n\}: 前一个字符至少出现m次,至多n次

                \{m,\}: 前一个字符至少出现m次

                \{0,n}: 前一个字符至多出现n次

        位置锚定:限定所匹配到的字符出现的位置
                ^:行首锚定

                $:行尾锚定

                ^$:空白行

                ^[[:space:]]*$:带有空白字符的空白行

                \<或\b:词首锚定

                \>或\b:词尾锚定

        分组:
            \(\):对字符分组,如:\(ab\)

        引用:
            \1:引用表达式中第一个‘左括号和与之对应的右括号’中所匹配到的内容一次,即把括号中的 内容在引用处再显示一次



grep:Global search REgular expression and Print out the line
        支持使用正则表达式进行文本搜索并打印出模式所匹配到的行
              


        grep [OPTIONS] PATTERN [FILE...]       
            --color=auto:对匹配到的字符着色高亮显示(centos7中默认grep=‘grep --color=auto)

            -i:忽略大小写

            -o:仅显示匹配到的内容

            -n:显示行号

            -v,--invert-match:取反,显示与匹配模式相反的内容

            -E:支持扩展的正则表达式

            -q, --quiet, --silient:静默模式,不输出任何信息


实例:         
        (1)取出/etc/passwd中用户名以“s"开头用户的信息
            技术分享

        (2)找出/etc/passwd文件中的三位或四位数
            技术分享       

        (3)取出shutdown用户的用户信息
            技术分享             

        (4)取出root用户之外的其他用户信息
            技术分享

        (5)取出/etc/bashrc文件中的空白行并打印出行数
            技术分享       

        (6)找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行
            技术分享

        (7)取出默认shell为nologin,用户id最大的用户
            技术分享

        (8)取出用户名和默认shell相同的用户信息
            技术分享



扩展正则表达式:(ERE)


        字符匹配:同基本正则表达式              

                 .:任意单个字符

                [ ]:指定范围内的任意单个字符

                [0-9],[[:digit:]]:所有数字

                [a-z],[[:lower:]]:小写字母

                [A-Z],[[:upper:]]:大写字母

                [[:alpha:]]:所有大小写字母

                [[:alnum:]]:数字及所有大小写字母

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

                [[:punct:]]:特殊字符

                [^]: 指定范围外的任意单个字符

        次数匹配:区别于基本正则表达式少了转义符“\"
                *:匹配任意次数

                ?:0或1次

                +:至少一次

                {m}:匹配m次

                {0,m}:匹配至多m次

                {m,}:匹配至少m次

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

        位置锚定:也同于基本正则表达式
                ^:行首锚定

                $:行尾锚定

                ^$:空白行

                \<或\b:词首锚定

                \>或\b:词尾锚定

        分组:
                (ab)

        引用:
                \1

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


基本正则与扩展正则表元字符使用差异总结:
        基本正则表达式和扩展正则表达式的元字符不同在于,扩展正则表达式在作次数匹配和分组不需要转义符"\",并多了”或“匹配



    egrep: grep的扩展版本        
            支持使用扩展正则表达式进行文本搜索并打印出模式所匹配到的行


            egrep [OPTIONS] PATTERN [FILE...]

                -F, --fixed-strings:支持使用固定字符串,不支持正则表达式,相当于fgrep

                -G, --basic-regexp:支持使用基本正则表达式

                -P, --perl-regexp:支持使用pcre正则表达式            
                -e PATTERN, --regexp=PATTERN:多模式机制

                -f FILE, --file=FILE:FILE为每行包含了一个pattern的文本文件,即grep script               
                -A NUM, --after-context=NUM, 显示出匹配行后面的N行

                -B NUM, --before-context=NUM,显示出匹配行前面N行

                -C NUM, -NUM, --context=NUM,显示出匹配行前后N行

    如下图:

                -A 2

                技术分享

                -B 2

                技术分享

                -C 2

                技术分享

        grep,egrep的选项基本通用,grep中列举出来的常用选项就不在这里再列举了


    实例:(grep中的练习用egrep同样能够实现,以下练习主要演示”|“或的使用)

            (1)取出/tmp目录下属组有可读权限的文件或目录

                技术分享

            (2)取出# ip add show结果中的1-255中的整数

                技术分享


    工具虽然强大,只有熟练掌握才能化为己用,熟悉命令使用只有一条路——把键盘敲烂,别问我为什么,我只能用别人告诉我的话来告诉你:”键盘敲烂,月薪五万“


本文出自 “Rock blog” 博客,请务必保留此出处http://johnsonxu.blog.51cto.com/11214707/1748937

以上是关于Linux三剑客之grepegrep及正则表达式使用详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux中的grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式和用法

Linux基础正则表达式之grepegrep

linux下grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式和用法

Linux文本处理三剑客之grep及正则表达式