grep (Global Regular Expression Print)是一种文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来,egrep (Extended grep)扩展正则表达式,

语法

grep [options] PATTERN  [FILE…]

            PATTERN(模式):  文本字符和正则表达式的起名字符组合而成匹配条件

options(参数)

           -i     --ignore-case  忽略字母大小写

           --color    高亮显示匹配的字符

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

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

           -A #        显示搜索到的行及后面#行的内容

           -B #         ………………………..前面#行的内容

           -C #        ………………………….前后各#行的内容

正则表达式:REGular EXPression, REGEXP 正则表达式是一种表示方式,让你可以查找匹配特定准则的文本。

grep 引号的意义

‘ ’:   强引用,所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换。grep ‘$a’file  表示的时查找 ‘$a’字符

“ ”:   把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。双引号""是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。grep “$a”file  表示引用变量a,查找变量a的值

  不加引号 : 不会将含有空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用

 

正则表达式由两个基本组成部队建立:一般字符和特殊字符,一般字符指没有特殊意义的字符,特殊字符常称为元字符。

元字符:

     \  :   转义符,如果元字符前面加有‘\’ 就表示为其本身的意义,不再有元字符的特殊意义

      .  :  匹配任意单个字符

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

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

     字符集合

     [:digit:]    表示数字集合0-9  [[:digit:]]与[0-9]的意义相同

     [:lower:]   小写字母集合

     [:upper:]  大写字母集合

     [:punct:]   标点符号字符

     [:space:]   空白格符[:blank:]空格(space)与定位(tab)字符

     [:alpha:]    字母字符包括大小写

     [:alnum:]   字母数字字符(包括大小写)

匹配次数字符

     *    :   匹配前面字符任意次,包括0

     .*   :   表示任意长度任意字符

     \?   :   匹配前面的字符一次或零次

     \{m,n\} :   匹配其前面字符至少m次,至多n次,如果最多次数不限,n可以省略不写,如果表示至少为0次,m可以写为0,但不能不写。\{1,\}  \{0,3\}

     注意: ‘\’ 在正则表达式中也代表有转义的意思,与bash本身的意义区别。如?在bash中表示任意一个字符,这里\?表示的是次数,{} 在bash中表示命令展开,在正则表示式中\{m,n\}表示次数,但在扩展正则表达式中可以不用’\‘来区分。

 

位置锚定:

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

    $    :   …   行尾,  ………………………………………………  行尾

    ^$ :  空白行

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

    \> 或 \b   :  …….词尾, ………………………………………………..尾部出现

    \<word\>  :  匹配整个单词   \<    \> 

 

分组:

\(\)   :  \(alnum\)*   表示把  (alnum) 做为一个整体,匹配任意次

后向引用

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

\2     :         第二个

\n     :         第n 个

即把前面分组的内容后面再引用

 

grep 命令就是使用字符或正则表达式规则来匹配文本的命令

egrep 扩展正则表达式,也grep –e  命令效果是一样的

[]

[^] 与正则表达式的用法一样

次数匹配

*   : 和正则表达式作用一样

? :  不用加 ’\’

+    :   匹配其前面的字符至少一次,类似正则表达式 \{1,\}

{m,n}  : 不使用斜线

位置锚定符与正则表达式一样

分组:

( )   : 与正则表达式\( \) 相比,不需要斜线

\1  \2  \3    后向引用

或者符

|  :or    或意义    C|cat  表达的是C 或者  cat   , (C|c)at  表示  Cat|cat  的意义