一.grep相关知识

1.grep

     grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

2.grep工作原理

     grep有两种模式:Basic和Extend模式。

    在Basic模式下,命令直接grep ,其中的?、+、{}、|、()都被解释为普通字符,如果要使用其的特殊意义,就必须对其用转义字符进行转义。

    在Extend模式下,命令grep-E,其中的?、+、{}、|、()都是特殊字符,要匹配时必须用转义字符将其转义,变为普通字符。

    grep命令在一个或多个文件中查找某个字符模式,如果这个模式中包含空格,就必须用引号把它括起来。grep命令中,模式可以是一个被引号括起来的字符串,也可以是单个词。位于模式之后的所有单词都被视为文件名。grep将输出发送到屏幕,它不会对输入文件进行任何修改或变化。grep返回的退出状态为0,表示成功。退出状态为1,表示没有找到。如果找不到指定的文件,退出状态为2。

3.grep工具选项

  常用的grep选项:

   grep-i:匹配时忽略字母大小写

   grep-n:列出所有匹配的文本行,并显示行号

   grep-v:只显示不匹配的文本行

   grep-w:匹配整个单词

   grep-x:匹配整个文本行

   grep-c:只打印匹配的文本行的行数,不显示匹配内容

不常用的选项:

   grep-l:只列出含有匹配的文本行的文件的文件名,不显示匹配内容

   grep-h:搜索多个文件时,不显示匹配文件名前缀

   grep-s:不显示关于不存在或者无法读取文件的错误

   grep-r:递归搜索,不仅搜索当前目录,还搜索各级子目录

   grep-q:禁止输出任何匹配结果,而是以退出码状态的形式表示是否匹配成功,其中0表示找到了匹配的文本行

   grep-P:支持Perl正则表达式

   grep-F:不支持正则表达式,将模式按字面意义进行匹配

   grep-b:打印匹配的文本行到文件投的偏移量,以字节为单位

二.正则表达式

   1.正则表达式:简单来说就是通过描述某种规则,用这种规则去匹配信息。正则表达式一般要用单引号括起来

      正则表达式的三要素:数量限定符、位置限定符和字符类

   2.三要素

     1>字符类:描述匹配字符信息

     wKiom1dvltbRG_9YAADqXMY6RA8687.png-wh_50

     2>数量限定符:用来描述匹配字符数量

        其中?、+、*这三个较为重要

    wKioL1dvlvbgBZ8sAALWTqA8MgE945.png-wh_50

     3>用来描述匹配字符位置信息

         其中常用的是^ 和$

      wKioL1dvlyKgUp2eAAGcHe0VTYw583.png-wh_50

 三.正则表达式结合grep工具的具体例子

    1.数量限定符例子(常用的)

       1>使用? 前导单元出现0次或一次

        wKioL1duNqbDL4N7AAAYT5bUq6k612.png-wh_50

       2>使用+   前导单元出现1次或多次

        wKiom1duN8KBRooeAAAZR8SQm7Y715.png-wh_50

       3>使用*  紧跟前面的单元出现0次或多次

       wKiom1duODmhaS5TAAAYSzvMo58231.png-wh_50

    2.字符类的例子(常用的)

       1>使用 . 匹配任意一个字符

         wKioL1duOPKTxkjyAAAaxUPlYfM127.png-wh_50

       2>使用[] 匹配括号里任意一个字符

         wKiom1duOeHxghPRAAAM6vMxICk108.png-wh_50

       3>使用^  匹配除中括号内的任意一个字符 

          wKioL1duOomCAZ2VAAAPASTFIH8987.png-wh_50  

   3.位置限定符的例子 (常用的)

       以file文件里内容为例

        wKiom1duO4CAca9EAAAUjlo4x6U843.png-wh_50

      1>^ 匹配行首位置

           以hel开头的行

         wKioL1duO5eSvrgFAAAU1vlf5Pg291.png-wh_50

         

      2>$ 匹配行末位置 

           以t结尾的行

         wKioL1duO_jCQeboAAANVtL3ltg213.png-wh_50

4.混合起来复杂的运用

    file文件里存ip信息

     wKioL1dvmdqSUPr5AAAiQRLPcps164.png-wh_50

     

   1>去粗略匹配一个ip地址 

     用命令匹配 

       wKioL1dvmWGBOZBEAAAYASGDtRM646.png-wh_50

     由于grep-E是Extend模式,.是特殊字符,而要对其匹配就必须转义

      wKioL1duRDPwtek5AAAZIcv7N94532.png-wh_50   

     ()将正则表达式的一部分括起来组成一个单元,然后去匹配 

  2>写一个shell脚本去匹配file里的ip

      shell脚本:

      wKiom1dvlm3jjmCFAAEVvqw5y7w153.png-wh_50

      count 用来计数匹配到的ip地址的个数

      运行结果:

      wKiom1dvlqnz_HUpAAAQqJhAQK4214.png-wh_50