grep命令详解与正则表达式

grep命令主要是做什么的呢 ?下面我们就来研究下。

grep命令简单来说就是“过滤”。就是把想看的数据通过grep过滤出来,把不想看的通过grep过滤掉。

它是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,Unix的grep家族包括(egrep,fgrep,grep)。egrep和fgrep的命令跟grep有所不同,egrep是grep的扩展,支持更多的re元字符,fgrep表示就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说正则表达式中的元字符表示自身的意思,不再特殊,linux使用的GNU版本的grep本身就强大,可以通过-G,-E,-F 命令行来选项egrep和fgrep的功能。

选项:

          -A   #       --after                         表示后#行 

        -B   #     --before                      表示前#行

   -C  #   --context                     表示“前后”各#行      

        -D          --devices                       设置对设备,FIFO,管道的操作,读取,跳过

         -E          --extended-regexp       扩展正则表达式egrep

         -F         --fixed-strings               一个换行符分隔的字符串的集合fgrep

   -G         --basic-regexp              基本正则

         -H         --with-filename            当搜索多个文件,显示匹配的文件名前缀

         -I                                              不匹配二进制的东西 

         -L        --files-without--math     匹配多个文件时,显示不匹配的文件名

   -P         -----perl-regexp            调用的perl正则

      -R/-r    --recursive                    递归调用

         -V        --version                      显示版本信息

         -U        --binary                       使用标志高亮匹配字符串

小写选项:

         -a         --text                           不要忽略二进制数据

    -b       --byte-offset                  打印匹配行前面答应该行所在的块行码

    -c        --count                         显示匹配的行数

    -d          --directories               目录操作,读取,递归跳过

         -e         --regexp                      指定字符串作为查找文件内容范本样式

         -f           ---file                           从文件中获得匹配模式

         -h          --no--filename            当搜索多个文件,不显示文件名的前缀

         -i            --ignore-case             不区分大小写

         -l            --files-with-matches   匹配多个文件时,显示匹配的文件名

   -n           --line-number             显示的内容加上行号

        -q          --quiet,--silent          不显示任何东西

   -s         --no-messages           不显示错误信息

   -v          --invert-match            显示不匹配的行

        -w         --word-regexp            匹配整个单词

        -x          --line-regexp              匹配整行

        -y                                            此选项跟-i选项相同

        -o         --only-matching          只显示一行中匹配PATTERN的数据

    -m         --max-count                匹配的最大数     

 

*注:单词由字母,数字,下划线组成

正则表达式:^   表示以^grep开头的行

           $     表示行尾锚定,用于模式的最右侧  

             .      表示任意单个字符  

       *       匹配前面的字符任意次

      .*    任意长度字符

        []     匹配指定的范围内的内容

             [^]       匹配不在范围的内容

        \(..\)      标记匹配字符,如\(love\) ,love被标记为1

       \<        锚定单词的开始,即词首锚定,用于单词模式的开始

        \>         锚定单词的词尾,即词尾锚定,用于单词模式的结束,锁定单词的结束

       \{n\}  匹配前面的字符n次

    \{,n\}  匹配前面的字符至多n次, <=n

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

    \{n,\}  匹配前面的字符至少n次, 最多无限次

    \+            匹配前面的字符出现最少1次, 即:肯定有且>=1次

    \?    匹配前面的字符出现0次或1次,即:可有可无

    ^$         空行

    ^[[:space:]]*$         空白行

    ^PATTERN$         用于模式匹配整行

    \<PATTERN\>      匹配整个单词

    \|                           或者

   ()                         将多个字符捆绑在一起,当作一个整体处理

   后向引用:\(string\string2\)\)

          1\:string\(string2\)

          2\:string2

    

 

上一篇:Linux基础(2):常用命令


下一篇:JVM监控命令和可视化监控工具