1. 程式人生 > >菜鳥的Linux之路1->egrep及其正則表示式

菜鳥的Linux之路1->egrep及其正則表示式

 正則表示式(REGEXP:Regular Expression)

正則表示式分為兩類:

    1,基本的正則表示式。Basic REGEXP

    2,擴充套件的正則表示式。Extened REGEXP

基本的正則表示式:

    字元匹配

    . 匹配任意單個字元

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

    [^]:匹配指定範圍外的任意單個字元

    次數匹配

    * 表示其前的字元匹配任意次

    \? 表示其前的字元匹配0或者1次

    \{m,n\} 表示匹配次數至少m次,至多n次,n可以省略表示沒有匹配次數的上限

    .* 表示匹配任意長度的任意字元

    錨定:錨定的是單個單詞

    ^ 錨定行首

    $ 錨定行尾

    \<,\b 錨定單詞首部

    \>,\b 錨定單詞尾部

    \(\) 用作後向引用->\1,\2,\3,...

grep命令:使用基本正則表示式定義的模式來過濾文字的命令

    格式:grep [option] Pattern file...

    常用option:

        -i:忽略匹配到的字元的大小寫

        -v:反向過濾

        -o:只顯示匹配到的字串,而不是整行都顯示

        --color:顯示匹配到的文字的顏色

        -E:使用擴充套件的正則表示式

        -A(After) #:當某一行被grep命令匹配到之後,不但顯示這一行的內容,這一行之後的#行也會被顯示出來

        -B(Before) #:當某一行被grep命令匹配到之後,不但顯示這一行的內容,這一行之前的#行也會被顯示出來

        -C(Context:上下文) #:當某一行被grep命令匹配到之後,不但是顯示出這一行的內容,這一行之前和之後的#行都會被顯示出來

    預設情況下,正則表示式工作在貪婪模式下

擴充套件的正則表示式

    字元匹配

    . 匹配任意單個字元

    [] 匹配指定範圍內的任意單個字元

    [^] 匹配指定範圍外的任意單個字元

    次數匹配

    * 匹配其前的字元任意次

    ? 匹配其前的字元0次或者1次

    + 匹配其前的字元至少一次 = \{1,\}

        舉例:grep --color -E '[[:space:]]+' ... 表示過濾出文字中,至少以一個空白字元開頭的行

    {m,n} 表示匹配次數至少m次,至多n次,擴充套件正則表示式的花括號不需要加反斜線

    位置錨定

    ^ 錨定行首

    $ 錨定行尾

    \< 錨定單詞首部

    >\ 錨定單詞尾部

    分組

    ():分組->\1,\2,\3,...

    或者|是擴充套件正則表示式中的特殊字元

    |:or

    舉例:

        C|cat表示的是C或cat

        如果想要實現Cat或cat的效果的話,得使用分組

            '(C|c)at'即可實現

egrep = grep -E 擴充套件的正則表示式

    舉例:取出檔案中1-255的整數

        egrep --color '\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b' ...

        \. \是轉譯符,轉譯符的作用是讓元字元表示它本身的意義,而不是元字元的意義,它就表示一個點

        egrep --color '(\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b){#}...'

        表示的是將前面()中的內容重複執行{}中的#次

IP地址:

ipv4->

    有五類地址,分別為A類,B類,C類,D類,E類,對我們有用的只有ABC三類,剩餘兩類是用來做研究使用的

    A類:IP的第一段從1-127

    B類:IP的第一段從127-191

    C類:IP的第一段從192-223

grep命令有三個,除了grep、egrep之外還有一個fgrep命令

    grep預設情況下只支援基本正則表示式的命令

    egrep是支援擴充套件正則表示式的命令

    fgrep = fast grep 快速grep

        grep做模式匹配去搜索文字的時候會浪費大量的CPU時鐘週期,而當你使用fgrep的時候,模式中的任何字元都會被當做字元本身去匹配,fgrep不支援正則表示式,所以它不去搜索正則表示式,所以速度很快