grep、正则表达式和扩展正则表达式的理解及运用

grep、正则表达式和扩展正则表达式的理解及运用

 

 

 

一 、grep的基本含义

我们可以从命令man grep中看到gerp命令的帮助文档,从中我们可以得出grep、egrep、fgrep都是文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的。

grep有三种变形:
   grep
:标准grep命令,支持基本正则表达式
   egrep:扩展grep命令,支持基本及扩展的正则表达式
   fgrep
fastgrep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思

 

grep使用语法格式为

grep [option]...'PATTERN' FILE...

grep [选项] …’基本正则表达式’ [文件]…

      

使用双引号:字符串参数最好使用双引号扩起来,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,在调用变量的时候也要使用双引号,比如grep"$MYVAR",否则无结果,在调用模式匹配是,应使用单引号

  

 

       grep常用选项

           -v: 反向选取

            -o:仅显示匹配的字串,而非字串所在的行

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

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

二、grep和正则表达式

      正则表达式含义:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。正则表达式中包含元字符,元字符是指不表示其字面意义,而用于额外功能性描述。

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

         字符匹配:

            .: 匹配任意单个字符

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

            [0-9], [[:digit:]]:指包含数字字符

            [a-z], [[:lower:]]:指包含小写字符

            [A-Z], [[:upper:]]:指包含大写字符

            [[:space:]]:指空白字符

            [[:punct:]]:指特殊字符 标点符号等 

            [[:alpha:]]:指包含所有的大小写字符

            [[:alnum:]]:指包含所有的大小写字符和数字字符

            [^]:匹配一个不在指定范围内的字符

       次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

                *: 任意长度,它前面的字符可以出现任意次

                \?:  0次或1次,它前面的字符是可有可无的

                \{m\}: m次,它前的字符要出现m次

                \{m,n\}: 至少m次,至多n次

                \{m,\}: 至少m次

               

        位置锚定:

                ^:行首锚定:指写在模式最左侧

                $:行尾锚定:指写在模式最右侧

                ^$:指空白行

不包含特殊字符的连续字符组成的串叫单词:

                \<:词首,出现於单词左侧,\b

                \>:词尾,出现於单词右侧, \b

               

        分组引用: 

               \(\):分组

               \#:  引用第n个 括号所匹配到的内容,而非模式本身

 

     示例:

         1、显示/etc/passwd中以nologin结尾的行

            #   grep nologin$ /etc/passwd

        使用此命令结果如下

wKiom1PA60Oh4K58AAI1IyyaKo8011.jpg

2、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行

  #  grep “[0-9]” /etc/inittab


wKioL1PA6yeDaBlrAAEdq7K9TBA569.jpg

 

三、扩展正则表达式

扩展正则表达式是对基础正则表达式添加了几个特殊构成的

语法格式:     

     grep  -E  ‘表达式‘文件…

grep  -E 'PATTERN' FILE...

       egrep ‘表达式‘ 文件…

egrep   'PATTERN' FILE...


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

         字符匹配:

            .: 匹配任意单个字符

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

            [0-9], [[:digit:]]:指包含数字字符

            [a-z], [[:lower:]]:指包含小写字符

            [A-Z], [[:upper:]]:指包含大写字符

            [[:space:]]:指空白字符

            [[:punct:]]:指特殊字符 标点符号等 

            [[:alpha:]]:指包含所有的大小写字符

            [[:alnum:]]:指包含所有的大小写字符和数字字符

            [^]:匹配一个不在指定范围内的字符

 

      次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

              

 *: 任意长度,它前面的字符可以出现任意次

             \?:  0次或1次,它前面的字符是可有可无的

              \{m\}: m次,它前的字符要出现m次

             \{m,n\}: 至少m次,至多n次

             \{m,\}: 至少m次

               

     位置锚定:

            ^:行首锚定:指写在模式最左侧

            $:行尾锚定:指写在模式最右侧

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

不包含特殊字符的连续字符组成的串叫单词:

            \<:词首,出现於单词左侧\b

            \>:词尾,出现於单词右侧\b

               

        分组引用: 

               \(\):分组

               \#:  引用第n个 括号所匹配到的内容,而非模式本身

 

       或者:

                |:表示或者

例:

A|B:A或者B

 

     示例:

1、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行

#  grep -E "^[[:space:]]{1,}.*"/boot/grub/grub.conf

wKiom1PA62SyAqCiAAE88ShMgAo793.jpg



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章