Chinaunix首页 | 论坛 | 博客
  • 博客访问: 356259
  • 博文数量: 76
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-21 22:30
文章分类
文章存档

2014年(38)

2013年(38)

分类: LINUX

2014-02-20 17:15:53

Pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件.

  Regular Expression(正则表达式):是一类字符书写出来的模式(Patern).

  Metacharacter(元字符):不表示字符本身的意义,在正则表达式中用于额外功能的描述。


1.grep,egrep,fgrep的简介:

    grep:( global search regular expression (RE)) and print out the line。grep是一款功能强大的文本搜索工具,根据用户指定的文本模式对目标文件(输入文件:input files或标准输入设备:standard input)进行逐行搜索,显示能够被模式匹配的行。

    egrep:egrep的命令只和grep有很小不同,使用扩展的正则表达式构建模式,egrep是grep的扩展相当于grep -e,可以支持更多的RE元字符。

    fgrep:fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符  表示回其字符本身的意义,不再特殊功能。



2.grep的工作方式:

   grep在一个或多个文件中搜索用户指定的模式。如果模式包括空格,则必须被引用,模式后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。


3.grep的使用格式:


        grep  [OPTIONS]   PATTERN    [FILE...]

        grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]


4.grep的常用选项:


       不带任何选项:在目标文件中查找并显示与模式匹配的行。

      例: 在/etc/passwd中查找并显示用户名为“root”用户的信息

       wKiom1MELo6jLIIJAABarsteXgE495.jpg

     -n:列出模式中匹配的行以及行号

      例:查找并显示在/etc/group中"mandrivia"所在的行和行号

         wKiom1MEVA3Bvj7_AACwrn6_EBc328.jpg

   

      -v:反向匹配显示不能被模式匹配的行

        例:   在/etc/passwd中查找并显示除了“root”之外的所有用户的信息  (结果中的一部分)  

        wKioL1MEQD-zC-V_AADLlMC5KhM764.jpg

      -o:仅匹配行当中被模式匹配到的字串,而不是整行

       例: 在/etc/group中查找"mandrivia",并显示

      wKioL1MEQpHBu_kSAABii8lmyl8189.jpg      

      -i:在搜索的目标文件中不去分大小写字母进行模式匹配

       例:  在/var/log/boot.log-20140216查找字母"o"和"O"所在的行  

      wKiom1MERMiCgnSaAADi18tEEHw556.jpg

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

      例:  在/etc/rc.d/init.d/network中查找并显示"t"至少出现2次所匹配的行

      wKiom1MER5mic2jeAACtgDgILB4428.jpg

      -A #:支持匹配到的字符串所匹配的行以及下#行(#:表示数字)

      例: 在/etc/fstab中查找并显示"/dev/shm "所匹配的行以及下2行

        wKiom1MEShGQiG0OAACkYlhGxBs992.jpg

        -B #:支持匹配到的字符串所在的行以及上#行(#:表示数字)

        例:  在/etc/host.conf 中查找并显示"order "所匹配的行以及上1行

        wKioL1METJ2w9mUdAABunRwChs8383.jpg

      -C #:支持匹配到的字符串所在的行以及上下#行(#:表示数字)

     例:在/proc/meminfo查找"MemFree"所在的行以及上一行和下一行

      wKioL1MEUC2AitMDAACUSoq9UOA030.jpg              



5.正则表达式和扩展正则表达式元字符以及元字符使用:

 5.1:标准RE的元字符级grep的使用

   5.1.1字符匹配

           

           [[:punct:]]:标点符号  

           [[:lower:]]:小写字母  

           [[:upper:]]:大写字母  

           [[:digit:]]:数字  

           [[:alnum:]]:数字和大小写字母

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

           [[:space:]]:所有空格字符

      5.1.1.1 例:显示"Aa12@"中的字母不区分大小写

           wKiom1MEXHnQk5MCAAA71K-fM1Y115.jpg

           显示"A a12@"中的空白字符

           wKioL1MEXajBgw5-AABcTCQf2qg270.jpg

             

          .:任意单个字符

       5.1.1.2 例:

           wKiom1MEX-HjqZlmAACFWrXdjY4552.jpg

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

      5.1.1.3 例:

         wKiom1MEY3ejC3PHAABk2rrNrXU282.jpg

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

      5.1.1.4 例:

         wKioL1MEZSWB_sK2AABNCOtfRQ4255.jpg

       

   5.1.2:次数匹配:用来指定匹配其前面的字符的次数

         

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

       5.1.2.1例:

          wKioL1MEaA6QioiMAABFvWlS0DI972.jpg

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

       5.1.2.2例:

          wKiom1MEapWSiXgEAAB1YIYBHgo237.jpg

            贪婪模式:尽可能多的匹配所搜索的字符串

          .*:匹配任意长度的任意字符

      5.1.2.3例:

          wKiom1MEbayiF9gcAABC7ebtonw099.jpg

          \{m\}:匹配其前的字符m次

          \{m,n\}:匹配其前的字符m次到n次

          \{m\, }:匹配其前的字符至少m次

          \{ ,n\}:匹配其前的字符至多n次

       5.1.2.4例:"o"出现2次

          wKiom1MEbsuRMmZbAABUeU182qA861.jpg

       5.1.2.5例:"o"至少出现3次

          wKiom1MEb43h8miKAAB-bo6PeHY557.jpg


   5.1.3:位置锚定

           

          ^:用于锚定行首的字符

        5.1.3.1例:查找并显示以"z"开头的用户的所有信息

           wKiom1MEchTAO79RAACFLwvO-Ec139.jpg

         $:用于锚定行尾的字符

       5.1.3.2例:显示以"n"为行尾的所有用户组的信息

         wKioL1MEc2LjueMKAACFLwvO-Ec165.jpg

         $^:锚定空白行

       5.1.3.3例:

         wKiom1MEdoXAycKSAABGOhH6tOM017.jpg

           \<词(\b词):锚定词首

         5.1.3.4例:显示用户名为zhou的所有信息:

          wKiom1MEt2qjycC_AABMjVyFPSY657.jpg

             \>词(词\b):锚定词尾

         5.1.3.5例:显示shell为/bin/bash的所有用户

           wKiom1MEuF2ibu2iAADHfno99Ks466.jpg


   5.4.分组元字符  

         \(\):括号限定多选结构的范围,标注量词作用的元素,为反向引用”捕获”文本

          \1,\2,…:反向引用 匹配之前的第一、第二组括号内的字表达式匹配的文本

                  使用括号的3个理由:限制多选结构、分组、捕获文本


       5.4.1例:显示当前正确的IP且范围为:1.0.0.1--223.255.255.254

            wKioL1MFlsGTTfycAAC33Q_hSZM477.jpg

       5.4.2例:

            wKiom1MEvGeSgtseAABdlZKtZGc745.jpg

   

   5.2扩展RE元字符及egrep的使用

       

       5.2.1字符匹配

                     用法同标准的正则表达式元字符使用相同

          例:在/var/log/boot.log-20140216查找字母"o"和"O"所在的行

             wKiom1MEwCOBy6UPAACdeOAzBhs399.jpg

       5.2.2次数匹配

         

               

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

              ?:匹配其前的字符0次或1次

              +:匹配其前的字符至少1次

              .*:匹配任意长度的任意字符

              {m}:匹配其前的字符m次

              {m,n}:匹配其前的字符m次到n次

              {m, }:匹配其前的字符至少m次

              { ,n}:匹配其前的字符至多n次

   

           例:查找以r开头后面至少有一个o的用户所在的行

             wKiom1MFhfrx6pdtAABTYE7F05Y149.jpg

             

       5.2.3位置锚定


           ^:锚定行首

           $:锚定行尾

             \<词(\b词):锚定词首

             \>词(词\b):锚定词尾

       

       5.2.4分组


            ():括号限定多选结构的范围,标注量词作用的元素,为反向引用”捕获”文本

            |:逻辑或操作符

           例:显示当前正确的IP且范围为:1.0.0.1 - 223.255.255.254

             wKioL1MFlmjDbz5qAAC6kzgG8i8290.jpg



     




阅读(2534) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~