Linux三剑客之grep、egrep及正则表达式使用详解


    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文件中的三位或四位数          

wKioL1betuuRmIE2AAAX0nKO-48660.png

       

    (3)取出shutdown用户的用户信息          

             

    (4)取出root用户之外的其他用户信息         

Linux三剑客之grep、egrep及正则表达式使用详解_第1张图片

   

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

wKioL1beuSzAimf0AAAGRLAarGo808.png

       

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

Linux三剑客之grep、egrep及正则表达式使用详解_第2张图片

   

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

   

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

wKiom1beub7Q9mFBAAARW-gjgOw583.png


扩展正则表达式:(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          

wKioL1bew6XD5cK7AAARl0Ury1g791.png

       

        -C 2    

wKioL1bew3XSPTW8AAAXxLjfBuA076.png

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


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

       

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

wKioL1be0fDgV2unAAAYiIzjAy8837.png

       

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

   

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


你可能感兴趣的:(grep,表达式,三剑客)