正则表达式和grep命令的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式和grep命令的用法相关的知识,希望对你有一定的参考价值。

正则表达式和grep命令的用法:

  一、正则表达式:

      正则表达式(也称为regular Expression,简称RE)就是由普通字符(例如字符a到z)以及特殊字符(称之为元字符)组成的文字模式。

    

    该模式描述在查找文字主体时待匹配的一个或多个字符串。


     正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表示通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序。vim、grep、find等命令都支持正则表达式。

    常用正则表达式:

    1、其中,.代表任意单个字符,*代表重复零个到无穷多个的前一个字符。

     例如,你要查找文件data中以an开头的所有行并显示,可以用一下命令:

        grep‘an.*data|more

    2、^代表行的开始。^love$  如:与所有love开头的行匹配

                            grep ^le test

    3、$代表行的结束。love$   如:与所有love结尾的行匹配

            那么‘^$’就表示空行

            grep   at$  test     (^ 和  $)是定位元字符

    4、[···]匹配括号中的字符之一            

           [abc]              匹配单个字符a或b或c

           [123]              匹配单个字符1或2或3

           [a-z]              匹配小写字母a-z之一

           [a-zA-Z]          匹配任意英文字母之一

           [0-9a-zA-Z]      匹配任意英文字母或数字之一

    注意:上面标红色的单子和之一,不管[] 里面多复杂,它的结果都是一个字符!

                         grep  ‘l[ae]e‘  test

                         grep‘/l[ae]/‘   test

    4、预定义的POSIX字符类

        字符类                   说明

        [:alnum:]              字母数字字符

        [:alpha:]              代表任何英文大小写字符,即A-Z,a-z

        [:lower:]              小写字母字符

        [:graph:]              除了空格符(空格键与[Tab]按键)外的其他所有按键

        [:upper:]              大写字母字符

        [:digit:]              数字

        [:space:]              空白字符(禁止打印),如回车符、换行符、竖直制表符合换页符

        [:punct:]              标点字符(即”’?!;:#$)

        [:cntrl:]              控制字符(禁止打印)

        [:print:]               代表任何可以被打印出来的字符

     尤其上表中的[:alnum:]、[:alpha:]、[:upper:]、[:lower:] 、[:digit:]这几个一定要知道代表什么意思,因为它要比a-z或A-Z的用途更确定。

     要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grepd的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。


    $ls-l|grep ‘^d‘

    通过管道过滤ls-l输出的内容,只显示以d开头的行。


    $grep  ‘test‘ d*

    显示所有以d开头的文件中包含tset的行。

   

    $grep  ’test‘ aa  bb  cc

    显示在aa bb,cc文件中匹配test的行。


    $grep ‘[a-z]\[5,\]‘ aa

    显示所有包含每个字符串至少有5个连续小写字符的字符串的行。   

 

扩展正则表达式

   grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。

   

    扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据。    


           元数据                                   意义和范例


            +                            重复前面字符1到多次。例如:匹配god,good

                                             goood等等字符串。 grep -nE go+d‘regular.txt


                   匹配0或1次前面的字符。例如,匹配gd,god

                        grep -nEgo?d’regular.txt


       |             或(or)的方式配多个字串。例如:grep –nE‘god|good’ regular.txt  匹配god或者good


                        匹配整个括号内的字符串,原来都是匹配单个字符。

          (  )                         例如:搜寻good或glad   grep –nE ‘g(oo|la)’regular.txt


     Linux下面的正则表达式博大精深,上文支持总结了最常用的部分,如果熟练掌握的上面部分的正则表达式基本上可以满足日常使用了。

    另外Linux很多命令支持正则表达式,比如find、sed、awk。请在使用的时候参照这些命令的手册使用正则表达式。

本文出自 “11305445” 博客,请务必保留此出处http://11315445.blog.51cto.com/11305445/1784033

以上是关于正则表达式和grep命令的用法的主要内容,如果未能解决你的问题,请参考以下文章

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

grep用法详解:grep与正则表达式 [转]

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

llinux文本三剑客之grepegrep及相应的正则表达式和用法

grep与正则表达式基础

grep一族正则表达式及用法