grepegrep及相应的正则表达式和用法

Posted

tags:

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

  grep与egrep都是基于“PATTERN”对指定的文本进行搜索 (文本处理三剑客之一)

 grep与egrep的区别在于grep默认支持的是基本正则表达式egrep默认支持扩展的正则表达式

 先从grep的选项说起

  使用格式:grep [OPTION]... PATTERN [FILE]...

   有以下选项:

       -i, --ignore-case:忽略文本字符的大小写

       -v, --invert-match:反向匹配;最终显示的结果是PATTERN不能成功匹配的行

       -C NUM, -NUM, --context=NUM:统计匹配PATTERN的所有的行数;

       -o, --only-matching;关闭贪婪模式,仅显示PATTERN匹配的内容

       -q, --quiet, --silent:不输出任何匹配结果

       --color[=WHEN], --colour[=WHEN]:将匹配的PATTERN内容以特殊颜色高亮显示

       -E, --extended-regexp:扩展的正则表达式,grep -E相当于egrep

       -F, --fixed-strings, --fixed-regexp:相当于fgrep

       -G, --basic-regexp:基本的正则表达式,即egrep -G相当于grep

       -p,--perl-regexp:使用PCRE(perl Common Regular Expression)引擎;

       -A NUM, --after-context=NUM:在显示匹配PATTERN行的同时显示其后面的NUM行

       -B NUM, --before-context=NUM:在显示匹配PATTERN行的同时显示其前面的NUM行

       -C NUM, -NUM, --context=NUM:在显示匹配PATTERN行的同时显示其前后的各NUM行

  重要的部分就是PATTERN区域,系正则表达式元字符匹配;

          字符匹配类:

       .:匹配任意单个字符

    例子:

       技术分享

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

    例子:技术分享

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

   例子:

     技术分享

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

                [:xdigit:]:所有的16进制数字

                a-z:所有的小写字母

                A-Z: 所有的大写字母

                0-9:所有的十进制数字

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

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

   例子: 

      技术分享

     \?:其前面的字符可有可无(0次或1次)

   例子:

      技术分享

     \+:其前面的字符至少出现一次(1次或多次)

      举例:grep ‘x*y‘ /PATH :匹配含有y字符前面有或没有x字符的行

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

   例子:

      技术分享

      \{m,n\}:其前面的字符至少出现m次,至多出现n次;(m<n)

      \{,n\}:其前面的字符只收出现0次,至多出现n次

      \{m,\}:其前面的字符至少出现m次,多多益善;

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

     位置锚定字符:

        行锚定:

            行首锚定:^

            行尾锚定:$

        字锚定:

            字首锚定:\<或\b

            字尾锚定: \>或\b

              \b:旧版本中的锚定方法,建议不使用;

    例子: 查找显示root用户

       技术分享

            对于正则表达式引擎来说,字是由非特殊字符组成的字符串

     分组与引用字符:

       \(PATTERN\):将PATTERN匹配到字符作为一个整体来处理

        例子:grep ‘\(xy\)\+‘ 文件名  匹配含有xy的行

在正则表达式引擎之中,有一系列内置变量,这些变量会保存所有分组内的字符信息,用于后向引用;这些变量一次是:\1,\2,\3,...

    pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)

         \1:pattern2

         \2:pattern4

         \3:pattern5

          所以\1:第一组小括号中的pattern匹配到的字符;

            \2:第二组小括号中的pattern匹配到的字符;

              ...

      例子:找出在/etc/passwd中用户的UID和GID相同的用户账户:

  技术分享

       或:\|

       注意:\|将其左右两遍的字符串当作整体对待

       例子:找出ifconfig命令的执行结果中数值在100-255之间的整数;

               第一位: 1 2

               第二位: 0-9 0-4 5

               第三位: 0-9 0-9 0-5

      技术分享       那么egrep用法就是类似与grep 只不过egrep是用的扩展的正则表达式 就是去掉“\”的元字符 

     egrep :

      egrep [OPTIONS] PATTERN [FILE...]

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

          字符匹配:

                 .

                 []

                 [^]

          次数匹配:

                 *

                 ?

                 +

                 {m}

                 {m,n}

                 {0,n}

          位置锚定

                 ^

                 $

                 \<,\b

                 \>,\b

          分组和引用:

                ()

                 \1,\2,\3,...

             或:

                 |

   



  

以上是关于grepegrep及相应的正则表达式和用法的主要内容,如果未能解决你的问题,请参考以下文章

grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式和用法

linux下grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式和用法

Linux中的grepegrep及相应的正则表达式和用法

grepegrep及相应的正则表达式用法