本文旨在学习grep命令,基本/扩展正则表达式

1. grep命令

    grep:根据模式搜索文本,并将符合的文本显示出来。本身的意义就是做部分匹配的

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

   grep常用选项

         -o:只显示被模式匹配到的字符串

        -n:在匹配到的字符串行首显示行号

        -v:显示没有被模式匹配到的字符串

        -i:表示忽略字符大小写

        -c:计算匹配到的字符串的次数

        -w:只显示全字符符合的行

        -x:只显示全行符合的行

        -q:静默模式,不输出任何信息

        -E: 使用扩展的正则表达式

        -A #(数字):显示被匹配到的行和后面的#行

        -B #(数字):显示被匹配到的行和前面的#行

        -C #(数字):显示上下文

          

2. 基本的正则表达式 REGular EXEperssion REGEXE

    元字符:

        .   :匹配任意单个字符

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

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

    字符集合:

        [:digit:] 数字

        [:lower:] 小写字母

        [:upper:] 大写字母

        [:alpha:] 所有字母

        [:alnum:] 所有数字和字母

        [:space:] 空白字符

        [:punct:] 标点符号 

    匹配次数(贪婪模式):

        *  :匹配其前面的字符任意次(也可以是0次)

        .* :任意长度任意字符

        \?(反斜线做转义) :匹配其前面的字符1次或者0次。

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

            \{1,\} :表示至少1次

            \{0,3\} :最多3次

    位置锚定:

     ^  :锚定行首,此字符后面的内容必须出现在行首

     $  :锚定行尾,此字符前面的任意内容必须出现在行尾

     ^$ :匹配空行

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

     \<或者\b :锚定词首,其后面的任意字符必须作为单词的首部出现

     \>或者\b :锚定词尾,其前面的任意字符必须作为单词的尾部出现

             \<root\>或者\broot\b :表示必须是root整个单词出现

              注意:\b有时候会显示不准确,建议尽量显示\<,\>。

     分组:

         \(\)

         \(ab\)* :后向引用,把ab作为一个整体,可以出现0次,1次或者任意次。

         \1 :引用第一个左括号与之对应的右括号所包含的所有内容

         \2 :

         \3 :


3. 扩展的正则表达式

    字符匹配(与基本的正则表达式相同)

         . :匹配任意单个字符

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

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

    次数匹配:

        * 

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

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

        +  :匹配其前面字符至少一次,相当于\{1,\}。?和+组合相当于*

        {m,n} :做次数匹配。扩展正则表达式不用加反斜线。

            例:取一个路径的基名

            [root@station126 ~]# echo /etc/sysconfig/network | egrep  -o '[[:alnum:]]+/?$'

            network

            [root@station126 ~]# echo /etc/sysconfig/ | egrep  -o '[[:alnum:]]+/?$'

            sysconfig/

           注意:体会?这里的妙用。

    位置锚定:(与基本的正则表达式相同)

        ^ :锚定行首

        $ :锚定行尾

        \<或\b:锚定词首

        \>或\b:锚定词尾

    分组:

        ()

        \1, \2, \3, …….后项引用

        |   :或者(or的意思)

        a|b :a或者b

        C|cat :C或者cat


4. 练习题

http://zhangbei.blog.51cto.com/11081042/1775836