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 17:22
下一篇 2017-04-08 18:23

相關推薦

  • corosync + pacemaker搭建高可用mysql

    一、實驗圖     二、環境準備  1)確保時間同步 [root@SQL1 ~]# crontab -e  */5 * * * * /usr/sbin/ntpdate 172.16.2.15 [root@SQL2 ~]#…

    Linux干貨 2015-06-30
  • LVS NAT模型演示

    LVS NAT模型演示 這里我們刻意將兩個RS的web頁面文件,提供為不同的內容(實際應用中,每個RS頁面的內容要完全相同) 基本配置 [root@web1 ~]# route add default gw 192.168.110.130  –> web1服務器…

    2016-10-29
  • Linux 入門(二)

    又一個周的時間過去了,覺得時間過的好快的呢,大概是因為沉迷于學習吧(害羞臉),在這一周里學習了不少東西呢,下面就來總結一下吧 (1)    cp 復制 如果只是單純的敲cp復制文件而不加任何選項的時候,如果目的目錄文件已經存在,就會直接覆蓋,而不會出現任何提示信息,而當在實際操作時,就算不加 –i選項,也會提示要不要覆蓋文件 原…

    2017-07-22
  • iptables入門到進階

    netfilter/iptables:        netfilter是存在于內核中的一個防火墻框架,用來管理網絡數據包,netfilter在IP數據包處理流程中的5個關鍵位置放置了5個鉤子(hook)函數,當數據包流經相應的位置時,相應的鉤子函數會被調用,每個對應的鉤子上有對應的表,表中有對應的…

    Linux干貨 2017-05-02
  • CentOS6下的網絡信息配置

    簡介     我們都知道在我們互聯網中,所有的通信都通過網絡來完成的,有了網絡當然也要有對應的地址,MAC地址是固定不變的,所以能變的只有IP的地址,那么今天來帶給大家如何在CentOS6中如何配置網卡。當然一下的所有命令都是在CentOS6中進行的。 一、網卡的配置文件    1.操作網卡的命令 …

    Linux干貨 2017-03-20
  • N22-第十周作業

    第十周    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)    POST–>BootSequence(BOIS)–>BootLoader(MBR)–>Kernel(ramfs或者ramdisk)–&gt…

    Linux干貨 2016-11-07

評論列表(1條)

  • renjin
    renjin 2017-04-12 13:20

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

欧美性久久久久