grep系的介绍及正则表达式详解

Posted

tags:

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

文本处理工具:

  全屏编辑器:vim,nano

  行编辑器:

     文本处理三剑客:grep系列,sed,awk

       grep系列:grep,egrep,fgrep;统称为文件搜索工具;基于PATTERN(模式)对于给定的文本文件进行模糊搜索,grep系列所有命令默认个左右贪婪工作模式;

       sed:stream editor ,流编辑器,文本编辑工具;

       awk:贝尔实验室产品;文本格式化工具,文件报告生成器,文件处理的编程语言


       grep系:

         grep:global search regular expression and print out the line ,利用正则表达式全面搜索并将搜索到的行显示出来;

         格式:

           grep [OPTIONS] PATTERN [FILE...]

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

          例:搜索在/etc/passwd文件夹中含有root字符串的文件:

           技术分享

           PATTERN :过滤匹配条件,是由没有特殊意义的文本字符或者是正则表达式元字符组成;

在文件中查找含有空白字符的操作如下:        技术分享;但是如果我们需要查找空白行的时候使用上述直接加空格的方法是无法找出空白行的,这时候需要用到正则表达式元字符来匹配完成我们需要查找的内容:

           正则表达式元字符:会被正则表达式处理引擎解释为特殊含义的字符(使用\来让正则表达式使用字符的本来意思,否则会被特殊解释);(元:最初的,最开始的)


           pcre(正则表达式引擎):用Perl(Perl语言)的正则表达式引擎;(默认系统以及安装好) 


           正则表达式的元字符:

             基本的正则表达式元字符:BRE

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


              基本的正则表达式元字符:BRE


                  通配符类(字符匹配类):

                    .:匹配任意单个字符                     ;

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

                    [^]:匹配任意指定范围外的单个字符(^脱字符表示排除范围内的,使命令匹配到范围外的字符)

                    下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符:

                         [:lower:]:大写字母                   技术分享

                         [:upper:]:小写字母

技术分享

                         [:alpha:]:大小写字母

                    技术分享

                         [:digit:]:十进制数字

            技术分享

                         [:xdigit:]:十六进制数字

               技术分享

                         [:alnumber:]:所有的十进制数字+字母

                         [:punct:]:所有的标点符号和特殊字符

                技术分享

                         [:space:]:所有的空白字符

技术分享

                         [a-z]:仅表示所有的小写字母

                 技术分享;

                         [A-Z]:仅表示所有的大写字母

          技术分享

                         [0-9]:仅表示所有的十进制数码

                 技术分享;



                  次数匹配类:该类字符前面的一个字符可以出现的次数;

                    示例:新建一个文档newtest

                     技术分享

                    *:其前面的字符可以出现任意次,即:0次,1次或多次;

                     技术分享

                    \?:表示其前面的字符可有可无,即:0次或1次;

                     技术分享

                    \+:其前面的字符至少出现一次;

                    技术分享

                    \{m,n\}:其前面的字符出现次数最少不少于m次,最多不多于n次;

                    技术分享

                    \{m\}:其前面的字符必须出现m次;

                    技术分享

                    \{m,\}:其前面的字符最少出现m次,最多次数不限;

                    技术分享

                    \{,n\}:其前面的字符最少次数为0次,最多次数为n;

                    技术分享

                    下图是字符c前面b出现次数最多为2次:

                    技术分享


                    注意:在正则表达式中,表示任意长度的任意字符:.*



                  位置锚定字符:

                    行锚定:

                      行首锚定:^技术分享

                      行尾锚定:$技术分享

                    字(不用任何符号)锚定:

                      字首锚定:\<或者\b

                      字尾锚定:\>或者\b

                    技术分享


                  分组与前向引用字符:

                    \(\):将小括号当中的包含的内容作为一个不可分割的整体来处理                          技术分享

                    \1,\2,\3...:前向引用字符

                       技术分享

                      正则表达式处理引擎的内置变量,\1表示前面所出现的第一组小括号中括选的内容;\2表示前面所出现的第二组小括号中括选的内容;..

                创建新文件示例:

                   技术分享

                    \(STRING1\(STRING2\)\):\1表示STRING1,\2表示STRING2;

                    \(STRING1\).*\(STRING2\):\1表示STRING1,\2表示STRING2;

                     使匹配到的字符前后一致,如下:

                    技术分享

                   

                  或者:

                    \|:将其左右的字符或者字符串当做整体对待;

                    "C\|cat"  可以匹配到C和cat 

 在下面这个示例中,要求匹配到  一位数或者两位数:             技术分享


              扩展的正则表达式元字符:ERE(与基本的正则表达式元字符不同之处在于“\”的使用,在基本正则表达式元字符中必须使用“\”,而扩展的正则表达式元字符中则不使用,其他格式大致一致) egrep:可以支持扩展正则表达式元字符;所以使用egrep命令,而不是grep命令(grep命令仅支持基本正则表达式)

             


                  通配符类(字符匹配类):

                    .:匹配任意单个字符

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

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

                       下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符:

                         [:lower:]:大写字母

                         [:upper:]:小写字母

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

                         [:digit:]:十进制数字

                         [:xdigit:]:十六进制数字

                         [:alnumber:]:所有十进制数字和字母

                         [:punct:]:所有特殊字符和标点符号

                         [:space:]:空格

                         [a-z]:仅表示所有的小写字母

                         [A-Z]:仅表示所有的大写字母

                         [0-9]:仅表示所有的十进制数码


                  次数匹配类:该类字符前面的一个字符可以出现的次数;

                    *:其前面的字符可以出现任意次,即:0次,1次或多次;

                    ?:表示其前面的字符可有可无,即:0次或1次;

                    +:其前面的字符至少出现一次;

                    {m,n}:其前面的字符出现次数最少不少于m次,最多不多于n次;

                    {m}:其前面的字符必须出现m次;

                    {m,}:其前面的字符最少出现m次,最多次数不限;

                    {,n}:其前面的字符最少次数为0次,最多次数为n;


                    注意:在正则表达式中,表示任意长度的任意字符:.*


                  位置锚定字符:

                    行锚定:

                      行首锚定:^

                      行尾锚定:$

                    字(不用任何符号)锚定:

                      字首锚定:<或者b

                      字尾锚定:>或者b


                  分组与前向引用字符:

                    ():将小括号当中的包含的内容作为一个不可分割的整体来处理;

                    \1,\2,\3...:前向引用字符(注意:此处虽然是在扩展正则表达式元字符格式中,但是\1等表示出现次数的标志,“\”不能省略)

                      正则表达式处理引擎的内置变量,\1表示前面所出现的第一组小括号中括选的内容;\2表示前面所出现的第二组小括号中括选的内容;..

                    (STRING1(STRING2)):\1表示STRING1,\2表示STRING2;

                    (STRING1).*(STRING2):\1表示STRING1,\2表示STRING2;

  

                  或者:

                    |:将其左右的字符或者字符串当做整体对待;

                    "C|cat"  可以匹配到C和cat


         grep系:

           grep:仅支持基本正则表达式元字符

           egrep:可以支持扩展正则表达式元字符

           fgrep:不支持任何形式的正则表达式元字符,将所有的字符都视为没有任何特殊意义的普通文本字符


           常用选项:

             -A num:同时显示被PATTERN匹配到的行及其后续num行;

             技术分享

             -B num:同时显示被PATTERN匹配到的行及其前面num行;

             技术分享

             -C num:同时显示被PATTERN匹配到的行及其前后num行;

            技术分享

             --color[=WHEN]:以高亮颜色显示被匹配到的内容;

             技术分享

             -c,--count:不输出符合条件的行的内容,而是输出匹配到的行数;

            技术分享

             -E:使grep命令支持正则表达式元字符;相当于执行了egrep命令;

              技术分享

              与

              技术分享

             一致

              

             -e:指定多个模式,在一个命令行中生效

              ;

             -F:(固定字符串),相当于fgrep;

             -f:从指定的文件中读取多个模式用于一次搜索(把多个模式放置于指定的文件中,使用grep系命令时,引用-f选项指定多个文件使用);

             -i:忽略文件中的字符大小写

               技术分享

             

             -o:仅显示被模式匹配到的部分(被匹配到的字符单行显示),关闭贪婪模式

              技术分享

             -q:安静模式,输出结果被撤销;相当于grep > /dev/null

             技术分享

             (执行之后虽然没有显示,但是确实是执行成功,只是静默了)

             -v:显示没有被模式匹配到的行

               技术分享


以上是关于grep系的介绍及正则表达式详解的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本——正则表达式(包含grep详细介绍及应用)

grep正则表达式详解及练习

正则表达式及三剑客(grep,awk,sed)详解

Grep家族和正则表达式详解

正则表达式及编程三剑客(grepsedawk)命令详解

grep及正则表达式