Shell 正则表达式 基础


一、linux文本查找命令

      三个基本常用的命令

      1grep:最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本

      2egrep:扩展式grep,其使用扩展式正则表达式(ERE)来匹配文本

      3fgrep:快速grep,这个版本匹配固定字符串而非正则表达式。

二、grep的基本语法

      GREP [options … ] pattern-spec [files…]

      用途:匹配一个或多个模式的文本行

      options:

   -E:使用扩展正则表达式进行匹配

       -i:忽略大小写

         --color 加以颜色可以添加别名

             laias gerp ='grep --color'

   -v:反向显示,没有被模式匹配到的行

      -o:只显示被模式匹配到的字符串

      -A(后面加数字):找到行显示行后面的n

            grep -A 2 '^core id ' /prp/cpuinfo

   -B(后面加数字):找到行显示前面的n行

            grep -B 2 '^core id ' /prp/cpuinfo

   -C(后面加数字):找到行的前后n行

            grep -C 2 '^core id ' /prp/cpuinfo

 

三、简单介绍

        组成部分:一般字符:没有特殊意义的字符

                             特殊字符:也称meta字符,元字符,在正则表达式中有特殊的意义

         常见的元字符:

             \ :通常用于打开或者关闭后续字符的特殊含义,如\(…\)\{…\}

             . :匹配任意单个字符(除NUL 

           *  :   匹配前面的字符任意次

           .* :任意长度的任意字符  例如:  a.*b:  以字母a开头

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

          [^] :匹配指定范围外的任意字符

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

           \{…\} :匹配前面的字符1次或者0

                      例如:   \{0,1\}  匹配一次

                                      grep 'a\{2,3\}' aa.txt

                                       grep 'a.\{2,3\}' aa.txt

    egrep:                

         + : 匹配前面的正则表达式1个或者多个扩张

         | :匹配|前或者后的正则表达式

        ( ):匹配方刮号起来的正则表达式群   ([])

              

        位置锚定:

         ^ :锚定行首,此字符后面的任意内容必须出现在行首

         $:锚定行尾,此字符前面的任意字符必须出现在行尾

        ^$:空白行

 

          \<:其后面的任意字符必须作为单词首部出现

          \>:其前面的任意字符必须作为单词的尾部出现

              \<root\>

              实例:    grep '\<root' aa.ttx    grep 'root\>' aa.ttx   grep '\<root\>' aa.ttx

 

           分组:\(\)

                       \(ab\)*   匹配ab

                         向后引用

                          \1:引用第一个左刮号以及与之对应的右刮号内的所有内容

                          \2:引用第二个左刮号以及与之对应的右刮号内的所有内容

                          \3:引用第三个左刮号以及与之对应的右刮号内的所有内容

                          \4:引用第四个左刮号以及与之对应的右刮号内的所有内容

                                实例:grep '\([0-9]).*\1$' aa.txt

 

四、grep\egrep\fgrep 之间的关系

         grep:在没有参数的情况下,只输出符合RE字符串之句子,常见的参数在“一”中

         egrep:为grep的扩充版,改良了许多传统的grep不能或者不便的操作;such as

                 --- grep 之下不支持?与+这两种字符,但是egerp可以得

                 --- gre不支持a|b 或则 (abc | xyz) 这类“或一”比对,但是egerp可以

                 --- grep 在处理{n,m}时,需要{}处理,但egrep不需要

 

 

 

五、字符集

          [:alnum:]  数字字符    [:digit:]  数字字符  [:punct:]  标点符合字符   [:alpha:]   字母字符

          [:graph:]   非空字符    [:space:] 空格字符  [:blank:]   空格与定位字符  [:lower:]  小写字母

          [:upper:]   大写字符   [:cntrl:]  控制字符   [:print:]  可显示的字符    [:xdigit:] 16进制数字

  

六、实例

          1grep 'h.\{0,4\}p$' a:匹配a文件中任意字符至少0次之多4

          2 grep 'h.\{1\}p$' a   :匹配a文件中任意字符1

          3 grep 'h.\{1,\}p$' a  :匹配a文件中任意字符至少1

          4  grep -o -E'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' grub.cfg  搜索IP地址

          5 grep  --color -E'C|cat' a.txt

          6 ls  |  grep '[[^[:space:]]*[0-9]'   显示以数字结尾但是不包含空白的文件。

          7、关于grepegrep

         

               如下通过常用实例来学习BREERE匹配,源文件url.txt内容如下:

            www.baidu.com

            http://www.baidu.com

            https://www.baidu.com

            http://wwwbaiducom

            baidu.com

            baidu

                 匹配以http或者https开头,并且其后为:并且含有.的串

            BRE匹配:

            grep '^https\{0,1\}.*\..*' url.txt

            ERE匹配:

            grep -E '^https?.*\..*' url.txt

                匹配结果如下:

            http://www.baidu.com

            https://www.baidu.com


你可能感兴趣的:(正则表达式,基础,shell)