我的學習記錄--grep , egrep

概念:

grep (Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

grep:傳統的grep程序,支持基本正則表達式

egrep:擴展的grep程序,支持擴展正則表達式

正則表達式:簡單來說就是,用一串自己定義的條件字符串,去匹配檢索文檔中符合條件的字符。


grep基本格式:

    grep [OPTIONS] PATTERN [FILE...]

常用選項:      

 -o:只顯示被模式匹配到的內容

 -i:(ignore case) 搜索時不區分字符大小寫

 -v:顯示不能夠被模式匹配到的行

 -E:使用擴展正則表達式

 -A #:顯示被模式匹配到的行以及下#行

 -B #:顯示被模式匹配到的行以及上#行

 -C #:顯示被模式匹配到的上下#行

         --color[=WHEN], --colour[=WHEN] :

               用於設置匹配到的字符,顯示高亮顏色否,有三個選項 auto ,always ,never

         例如:

           wKiom1UbyYHAM-PcAAB5V84jxFc457.jpg  

基本正則表達式元字符:


    字符匹配:

. :匹配任意單個字符

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

        [^]:指定範圍外的任意單個字符


    次數匹配:在期望匹配字符後面提供一個控制符,用於表達匹配其前面字符指定的次數

* :任意長度,表示0次,1次或多次;

        .*:任意長度的任意字符(工作於貪婪模式,儘可能長的進行匹配)

\?:匹配其前的字符0次或1次,表示其左側字符可有可無

\+:匹配其前面的字符1次或多次,表示其左側字符至少出現一次

\{m\}:精確匹配其左側字符出現m次

\{m,n\}:至少m次,至多n次:

\{0,n\}:至多n次

\{m,\}:至少m次


    位置錨定:

^:錨定行首,形如:^PATTERN    

$:錨定行尾,形如:PATTERN$

^PATTERN$:用模式來匹配整行

         例如:

            grep "^$"  匹配空白字符的行(有空格的行不能匹配)

            grep "^[[:space:]]*$"  匹配所有空行(可以有空格)

    grep "^sh.*sh$" /etc/passwd  匹配/etc/passwd文件中以sh開始,sh結尾的整行

    單詞錨定:由非特殊字符組成的連續的字符串

\<:錨定詞首 也可用\b,形如:\<PATTERN  \bPATTERN

例如:grep "\<sh" /etc/passwd  匹配/etc/passwd文件中以“sh”開頭的單詞

        \>:錨定詞尾,也可以用\b,形如:PATTERN\>  PATTERN\b

\<PATTERN\>:匹配PATTERN能匹配的整個單詞


    分組匹配:

\(PATTERN\)

注意:分組中的模式,在某次的具體匹配過程中所匹配到的字符,可以被grep記憶(保存於內置    的變量中,這些變量時\1,\2,...),因此,還可以被引用

\1:引用,模式中左到右,由第一個左括號以及與之對應的右括號中的模式所匹配到的內容

\2:引用,模式自左而右,由第二個左括號以及與之對應的右括號中的模式所匹配到的內容

    例如:

grep "\(a.b\).*\1" FILE.. 用於匹配文件行中出現了"a.b",且後面再次出現了前方“a.b”匹配到的相同字符串   

        如圖:

wKioL1Ub0WGRkA_4AACoWibJEl4592.jpg 

        amb hello amb 匹配

amb hello anb 不匹配 \1匹配的是前面匹配到的內容amb,而非\(a.b\)模式



擴展的正則表達式元字符:(無特殊說明則用法和基本正則表達式相同)

    字符匹配:

        . :匹配任意單個字符

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

[^]:指定範圍外的任意單個字符

    次數匹配:

*:任意次

?:0或1次

+:至少1次

{m}:精確匹配m次

{m,n}:至少m次,至多n次

{m,}:至少m次

{0,n}:至多n次

    位置錨定:

^:行首

$:行尾

\<,\b:詞首

\>,\b:詞尾

^$:空白行

    分組:

(PATTERN):引用\1,\2,...


    或者:(兩側的所有內容)

a|b :a或者b  

abc|CBA: abc或者CBA


    egrep(grep -E)命令:(基本和grep一樣)

grep -E PATTERN FILE...

egrep PATTERN FILE...

        

練習:

    1.顯示/proc/meminfo文件中以大寫或小寫S開頭的行;

        # grep -i "^s" /proc/meminfo --color=auto 或;

        # grep "^[sS]" /proc/meminfo --color=auto

        wKioL1Ub0mDi-VCwAABYn_jaOBc509.jpg

        用擴展正則表達式書寫:

        # egrep -i "^s" /proc/meminfo --color=auto

        wKiom1Ub1trzqjMKAABY7ZB6bws140.jpg

        

    2.顯示/etc/passwd文件中其默認shell爲非/sbin/nologin的用戶

        # grep -v "nologin$" /etc/passwd    ;-v 顯示不被匹配到的行

        wKioL1Ub0_6ifbTJAACzE_NMBp4740.jpg

        用擴展正則表達式書寫:

        # grep -E -v "nologin$" /etc/passwd  ;-E 表示使用擴展正則表達式

        wKiom1Ub106i5gBHAACnAJGmL6k417.jpg


    3.找出當前系統上其用戶名和默認shell相同的用戶的信息

grep "^\(.*\)\>.*\1$"  --color=auto /etc/passwd

        wKiom1Ub0_vj-7XIAADEVG1kv8U261.jpg

        用擴展正則表達式書寫:

        # grep "^(.*)\>.*\1$"  --color=auto /etc/passwd 

        wKiom1Ub1_7jtfoAAADElo_hEL8683.jpg




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