Shell 正則表達式 基礎


一、linux文本查找命令

      三個基本常用的命令

      1grep:最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本

      2egrep:擴展式grep,其使用擴展式正則表達式(ERE)來匹配文本

      3fgrep:快速grep,這個版本匹配固定字符串而非正則表達式。

二、grep的基本語法

      GREP [options … ] pattern-spec [files…]

      用途:匹配一個或多個模式的文本行

      options:

   -E:使用擴展正則表達式進行匹配

       -i:忽略大小寫

         --color 加以顏色可以添加別名

             laias gerp ='grep --color'

   -v:反向顯示,沒有被模式匹配到的行

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

      -A(後面加數字):找到行顯示行後面的n

            grep -A 2 '^core id ' /prp/cpuinfo

   -B(後面加數字):找到行顯示前面的n行

            grep -B 2 '^core id ' /prp/cpuinfo

   -C(後面加數字):找到行的前後n行

            grep -C 2 '^core id ' /prp/cpuinfo

 

三、簡單介紹

        組成部分:一般字符:沒有特殊意義的字符

                             特殊字符:也稱meta字符,元字符,在正則表達式中有特殊的意義

         常見的元字符:

             \ :通常用於打開或者關閉後續字符的特殊含義,如\(…\)\{…\}

             . :匹配任意單個字符(除NUL 

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

           .* :任意長度的任意字符  例如:  a.*b:  以字母a開頭

           [] :匹配指定範圍內任意單個字符

          [^] :匹配指定範圍外的任意字符

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

           \{…\} :匹配前面的字符1次或者0

                      例如:   \{0,1\}  匹配一次

                                      grep 'a\{2,3\}' aa.txt

                                       grep 'a.\{2,3\}' aa.txt

    egrep:                

         + : 匹配前面的正則表達式1個或者多個擴張

         | :匹配|前或者後的正則表達式

        ( ):匹配方刮號起來的正則表達式羣   ([])

              

        位置錨定:

         ^ :錨定行首,此字符後面的任意內容必須出現在行首

         $:錨定行尾,此字符前面的任意字符必須出現在行尾

        ^$:空白行

 

          \<:其後面的任意字符必須作爲單詞首部出現

          \>:其前面的任意字符必須作爲單詞的尾部出現

              \<root\>

              實例:    grep '\<root' aa.ttx    grep 'root\>' aa.ttx   grep '\<root\>' aa.ttx

 

           分組:\(\)

                       \(ab\)*   匹配ab

                         向後引用

                          \1:引用第一個左刮號以及與之對應的右刮號內的所有內容

                          \2:引用第二個左刮號以及與之對應的右刮號內的所有內容

                          \3:引用第三個左刮號以及與之對應的右刮號內的所有內容

                          \4:引用第四個左刮號以及與之對應的右刮號內的所有內容

                                實例:grep '\([0-9]).*\1$' aa.txt

 

四、grep\egrep\fgrep 之間的關係

         grep:在沒有參數的情況下,只輸出符合RE字符串之句子,常見的參數在“一”中

         egrep:爲grep的擴充版,改良了許多傳統的grep不能或者不便的操作;such as

                 --- grep 之下不支持?與+這兩種字符,但是egerp可以得

                 --- gre不支持a|b 或則 (abc | xyz) 這類“或一”比對,但是egerp可以

                 --- grep 在處理{n,m}時,需要{}處理,但egrep不需要

 

 

 

五、字符集

          [:alnum:]  數字字符    [:digit:]  數字字符  [:punct:]  標點符合字符   [:alpha:]   字母字符

          [:graph:]   非空字符    [:space:] 空格字符  [:blank:]   空格與定位字符  [:lower:]  小寫字母

          [:upper:]   大寫字符   [:cntrl:]  控制字符   [:print:]  可顯示的字符    [:xdigit:] 16進制數字

  

六、實例

          1grep 'h.\{0,4\}p$' a:匹配a文件中任意字符至少0次之多4

          2 grep 'h.\{1\}p$' a   :匹配a文件中任意字符1

          3 grep 'h.\{1,\}p$' a  :匹配a文件中任意字符至少1

          4  grep -o -E'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' grub.cfg  搜索IP地址

          5 grep  --color -E'C|cat' a.txt

          6 ls  |  grep '[[^[:space:]]*[0-9]'   顯示以數字結尾但是不包含空白的文件。

          7、關於grepegrep

         

               如下通過常用實例來學習BREERE匹配,源文件url.txt內容如下:

            www.baidu.com

            http://www.baidu.com

            https://www.baidu.com

            http://wwwbaiducom

            baidu.com

            baidu

                 匹配以http或者https開頭,並且其後爲:並且含有.的串

            BRE匹配:

            grep '^https\{0,1\}.*\..*' url.txt

            ERE匹配:

            grep -E '^https?.*\..*' url.txt

                匹配結果如下:

            http://www.baidu.com

            https://www.baidu.com


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