grep命令與正則表達式

grep命令與正則表達式 
什么是grep: 
        grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。egrep支持擴展正則表達式的grep,fgrep快速搜索,不支持正則表達式。 
grep命令: 
    –color:相當于auto,對匹配到的文本進行著色顯示 
    -v:顯示不被pattern匹配到的行(取反,找出不包含“pattern”的行) 
    -i: 忽略字符大小寫 
    -n:顯示匹配到的行號 
    -c:顯示統計匹配到的行數,等同于wc -l 
    -o:僅顯示匹配到的字符串 
    -q:靜默模式,不輸出任何信息 
    -A # :after ,后#行 (#:數字) 
    -B # :before ,前#行 
    -C # :context, 前后各#行 
    -e :實現多個選項間的邏輯or關系 
    -w:匹配整個單詞 
    -E:相當于egrep,支持擴展的正則表達式 
    -F: 相當于fgrep,不支持正則表達式 
正則表達式 
        概念:正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。 
     目的:

  1. 給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”);
  2. 可以通過正則表達式,從字符串中獲取我們想要的特定部分。 
    特點:
  3. 靈活性、邏輯性和功能性非常的強;
  4. 可以迅速地用極簡單的方式達到字符串的復雜控制。

對于剛接觸的人來說,比較晦澀難懂。 
正則表達式引擎 
        正則引擎主要可以分為兩大類:一種是DFA,一種是NFA。 
DFA 引擎在線性時狀態下執行,因為它們不要求回溯(并因此它們永遠不測試相同的字符兩次)。DFA 引擎還可以確保匹配最長的可能的字符串。但是,因為 DFA 引擎只包含有限的狀態,所以它不能匹配具有反向引用的模式;并且因為它不構造顯示擴展,所以它不可以捕獲子表達式。 
傳統的 NFA 引擎運行所謂的“貪婪的”匹配回溯算法,以指定順序測試正則表達式的所有可能的擴展并接受第一個匹配項。因為傳統的 NFA 構造正則表達式的特定擴展以獲得成功的匹配,所以它可以捕獲子表達式匹配和匹配的反向引用。但是,因為傳統的 NFA 回溯,所以它可以訪問完全相同的狀態多次(如果通過不同的路徑到達該狀態)。因此,在最壞情況下,它的執行速度可能非常慢。因為傳統的 NFA 接受它找到的第一個匹配,所以它還可能會導致其他(可能更長)匹配未被發現。 
元字符分類:字符匹配、匹配次數、位置錨定、分組 
字符匹配: 
        常用選項: 
.         :匹配任意單個字符 
            [abc]:a|b|c 
            [^abc]:除abc之外的字符 
            [:alnum:]:字母和數字 
            [:alpha:]:英文大小寫字符 a-z A-Z 
            [:lower:]:小寫字母 
            [:upper:]:大寫字母 
            [:space:]:專門匹配空格 
        不常用選項: 
            [:cntrl:]:不可打印的控制字符(退格、刪除、警鈴……) 
            [:digit:]:十進制數字 
            [:xdight:]:十六進制數字 
            [:graph:]:可打印的非空白字符 
            [:print:]:可打印字符 
            [:punct:]:標點符號 
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數 
        * : 匹配前面的字符任意次,0到無窮 
        .*:任意字符出現任意次,比如說 123 456 abc 
        a*:a字符出現任意次 aaaa aa 
        [[:lower:]]*:任意小寫字母出現任意次 
        \? :匹配前面的字符出現0次或1次 
            例:a\? 出現0次或1次 
        \+:匹配前面的字符至少1次 
            例:a+ a至少出現1次 
        \{n\}:前面的字符出現n次 
            例:[0-9]\[3\] 000-999 
        \{m,n\}:匹配前面的字符出現m到n次,m、n是一個范圍 
        \[,n\]:匹配前面的字符最多出現n 
            例:[0-9]\{,3\}最大匹配是999 
        \{m,\}:匹配前的字符至少出現m次 
            [0-9]\{3,\} 000 無窮 
位置錨定:用來定位字符出現的位置 
        ^ : 錨定行首 
        $: 錨定行尾 
        ^$ :匹配空行的 
        ^[[:space:]] :行首是空白的字符 
        ^[[:space:]]*$:也是空行 
        ^a:以a開頭的行 
        b$:以b結尾的行 
        ^a.*b$:以a開頭,中間任意字符,以b結尾 
        ^a.*[[:space:]]\{3\}.*b$:以a開頭跟任意字符,中間出現三次空格在跟任意字符以b結尾的行 
        ^#:以#開頭的行

        \b \b :匹配詞首和詞尾 

        \< >:匹配次首和詞尾 
            \broot \b = \<root \> 
分組:將匹配規則分成不同的組 使用1 2 3 … 等數字去標示,便于后面使用同樣規則的時候可以直接引用 
        \| : 或 
            例:a \| b a或b 
擴展正則表達式 
        . :單個字符 
        [ ]:中括號范圍內的字符 
        *:匹配前面字符的任意次 
        ?:0或者1次 
        +:1次或者多次 
        {m}:匹配m次 
        {m,n}:至少m次 至多n次 
        |:或者 a|b a或者b 
        ^:行首 
        $:行尾錨定 
        \<,\b:語首 
        \>,\b:語尾 
        ( ):分組 向后引用 \1 \2

原創文章,作者:木,如若轉載,請注明出處:http://www.www58058.com/72810

(0)
木
上一篇 2017-04-08
下一篇 2017-04-08

相關推薦

  • linux文件基本權限、默認權限、隱藏權限和ACL權限

    基本權限    文件屬性rwx     每個文件當用ls -l查看時,都會顯示文件的詳細屬性信息,其中在排在首位的共有10位字符信息     例如 -rw-r–rw-. 1 root root …….. 共有10位,第一位代表的是文件的類型,后邊9位表示的是文件的…

    Linux干貨 2016-08-04
  • Nginx基礎整理

    目錄結構如下: Nginx基礎知識Nginx HTTP服務器的特色及優點 Nginx的主要企業功能 Nginx作為web服務器的主要應用場景包括: Nginx的安裝安裝環境 快速安裝命令集合 各個命令解釋 腳本 注意 安裝故障總結故障一:沒有安裝pcre或pcre-devel 故障二:沒有安裝openssl和openssl-devel 常用的Nginx ht…

    Linux干貨 2017-08-29
  • 文本三劍客之sed

      文本處理三劍客:    grep,egrep,fgrep:文本過濾器    sed:stream  editor,流編輯器,是一行一行處理的    awk :文本格式化工具,報告生成器     sed工作方式:它是讀一行的文本…

    Linux干貨 2016-08-15
  • 程序包管理rpm&yum&編譯安裝

    centos6.6程序包管理 二進制應用程序的組成部分: 二進制文件,庫文件,配置文件和幫助文件 程序包管理器:rpm rpm包管理器的前端工具:yum 程序包之間存在依賴關系 rpm的命名方式: name_VERSION_release.arch.rpm     VERSION: major.minor.r…

    Linux干貨 2016-07-07
  • 第五周作業

    查看鏈接:http://note.youdao.com/noteshare?id=1ed7b36aa41cbdc1154e3e5b54e43fce

    Linux干貨 2016-09-19
  • class 11 壓縮軟件(二)、shell編程(三)和軟件包管理(一)

    一、壓縮軟件(二) tar tar [OPTION]… (1) 創建歸檔     tar -c -f / PATH/TO/SOMEFILE .tar FILE…     tar cf…

    Linux干貨 2016-08-21

評論列表(1條)

  • renjin
    renjin 2017-04-12 13:20

    詳細介紹了grep命令與正則表達式的使用,內容寫的非常詳細,但需要注意一下排版的問題,也可以適當的加入圖片

欧美性久久久久