一、作用:

  grep: Global serch REgular expression and Print out the line.

  文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;


二、常用选项:

  

     grep [OPTIONS] PATTERN [FILE...]

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


        OPTIONS:

           --color=auto: 对匹配到的文本进行着色后高亮显示;

           -i: ignorecase,忽略字符大小写;

           -o: 仅显示匹配到的字符串本身;

           -v: 反向显示;

           -E: 支持使用扩展的正则表达式元字符;

           -q,--quiet, --silent:静默模式,即不输出任何信息;


           -A #:after,后#行

           -B #:before, 前#行

           -C #:conext, 前后各#行


    基本正则表达式元字符:

        字符匹配:

           .:匹配任意单个字符;

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

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


        匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面的字符出现的次数;默认工作于贪婪模式;

           *:匹配其前面的字符任意次;0,1,多次;

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

           \?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;

           \+:匹配其前面的字符1次或多次;即其前面的字符要出现至少1次;

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

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

               \{0,n\}:至多n次;               

               \{m,\}:至少m次;


        位置锚定:

           ^:行首锚定;用于模式的最左侧;^root

           $:行尾锚定;用于模式的最右侧;

           ^PATTERN$: 用于PATTERN来匹配整行;

              ^$: 空白行;

              ^[[:space:]]*$:空行或包含空白字符的行;

           单词:非特殊字符组成的连续字符(字符串)都称为单词;


            \<或\b: 词首锚定,用于单词模式的左侧;

            \>或\b: 词尾锚定,用于单词模式的右侧;

            \<PATTERN\>: 匹配完整单词;

        分组及引用:

            \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

            Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

            \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

            \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

            \3:模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

            ...

            grep "\(l..e\).*\1" love.txt  后面的\1可以引用\(l..e\)中的内容;


            后向引用:引用前面的分组括号中的模式所匹配到字符;


     

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

           选项:-i, -o, -v, -q, -A, -B, -C 

            -G:支持基本正则表达式


         扩展正则表达式的元字符:

            字符匹配:

            次数匹配:

             *:任意次,0,1或多次;

             ?:0次或1次,其前的字符是可有可无的;

             +:其前字符至少1次;

             {m}: 其前的字符m次;

             {m,n}:至少m次,至多n次;

               {0,n}:

               {m,}

           位置锚定:

           分组及引用:

             ():分组:括号内的模式匹配到手字符会被记录于正则表达式引擎的内部变量中;

             后向引用:\1,\2,...

           或:

             a|b: a或者b:

               C|cat: C或cat

               (c|C)at: cat或Cat

三、命令示例:


 

 找出/etc/fstab文件中的空白行数量
     ~]# grep "^$" /etc/fstab  | wc -l
        1
   找出/etc/passwd文件中用户为root的行
    ~]# grep "^root\>" /etc/passwd
        root:x:0:0:root:/root:/bin/bash
   找出/etc/passwd文件中用户名与shell名相同的行
     ~]# grep --color -E "^([^:]+\>).*\1$" /etc/passwd
        sync:x:5:0:sync:/sbin:/bin/sync
        shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
        halt:x:7:0:halt:/sbin:/sbin/halt
   找出/proc/meminfo文件中M或S开头的行
     ~]# grep -E "^(M|S)" /proc/meminfo 
        MemTotal:         808160 kB
        MemFree:          488092 kB
        SwapCached:            0 kB
        Mlocked:               0 kB
        SwapTotal:       2072572 kB
        SwapFree:        2072572 kB
        Mapped:            15460 kB
        Shmem:               236 kB
        Slab:              75108 kB
        SReclaimable:      16084 kB
        SUnreclaim:        59024 kB
   显示/etc/inittab文件中以一个字母开头的行
     ~]# grep "^[a-z]" /etc/inittab 
        id:3:initdefault:
   找出ifconfig命令结果中的1-255之间的整数
     ~]# ifconfig | grep -E --color "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
      eth0  Link encap:Ethernet  HWaddr 00:0C:29:12:BA:26  
          inet addr:172.16.249.45  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe12:ba26/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX bytes:23544203 (22.4 MiB)  TX bytes:14827318 (14.1 MiB)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1