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



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