一、基本正则表达式:Grep的用法介绍

1grep简介:

   Grep 是一种强大的文本搜索工具,它能根据模式,搜索文本,并将符合模式的文本行显示出来。

Grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。Grep可用于shell脚本,因为grep是通过返回一个状态值来说明搜索的状态,如果搜索成功,就返回0;如果不成功,则返回1。我们利用这些返回值就可以很方便地进行一些文本处理工作。

2grep正则表达式元字符集

   ^grep

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

   grep$: 

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

   ^$: 

     空白行

   *

     匹配其前面的字符任意次

   .*:

     任意长度的任意字符

    ?:

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

    .:

     匹配任意单个字符

    [^]:

     配指定范围外的任意单个字符

x\{m,\}

 重复字符xm次,如:0\{5\}匹配包含0的行。

x\{m,n\}:

 匹配其前面的字符x至少m次,至多n

2、字符集合:

      [:space:] 空白字符        [:punct:] 标点字符

      [:lower:] 小写字符        [:upper:] 大写字符

      [:digit:] 数字             [:alnum:] 数字和大小写字母

      [:alpha:]: 大小写字母      [:graph:]: 非空字符

3、grep命令选项:

   -i--ignore-case

   忽略大小写差别

   -q--quiet

   取消显示,只返回退出状态。0表示找到了匹配的行

   -color

   给符合条件的加上颜色

   -v--revert-match

   显示没有被模式匹配的行

   -o

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

4、位置锚定:

  

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

          如:grep '^root' etc/passwd  

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

          如:grep 'bash$' etc/passwd  

    ^$:空白行 如: grep '^$' /etc/passwd  /etc/passwd中的空白行就会被匹配 

   

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

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

        如:   grep "\<root" /etc/passwd

               grep "root\>" /etc/passwd

5、分组

\(\)

   ab*表示a后面的b可以出现01次或者任意次;

   而分组  \(ab\)*则表示ab这个整体可以出现01次或者任意次

后向引用:

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

\2:引用第二个左括号以及与之对应的右括号所包含的内容

例如:建立一个文档test1.txt , 内容为

          (He love his lover.

            She like her lover.

            He like his liker.

            She love her liker.)

输入 #grep  l..e.*l..e  test1.txt

    则 He love his lover.

       She like her lover.

       He like his liker.

       She love her liker.  

输入:#grep \(l..e\).*\1 test1.txt

则  He love his lover.

    He like his liker.

二、扩展正则表达式(egrep

1、字符匹配:

      .: 匹配任意单个字符

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

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

2、次数匹配:

      *:匹配其前面的字符任意次

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

      +:匹配其前面的字符至少1

     {m,n}匹配其前面的字符至少m次,至多n不需要反斜杠(\

3、位置锚定:

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

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

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

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

4、分组:

():分组 

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

或者

|: or

如:egrep 'C|cat' /test.txt  其意思是说在test.txt中查找Ccat

        注:    egrep = grep  -E