grep 學習筆記

grep是UNIX和LINUX中使用最普遍的命令之一
grep容許對文本文件進行模式查找。若是找到匹配模式,grep打印包含模式的全部行。grep支持基本正
則表達式,也支持其擴展集。

測試文件datafile,以下git

wKiom1U9qy3wQkriAAEJag0M87o558.jpg


1.grep通常格式爲:
grep[選項]基本正則表達式[文件]
這裏基本正則表達式可爲字符串。

2.在grep命令中輸入字符串參數時,最好將其用雙引號括起來。
一是以防被誤解爲shell命令
二是能夠用來查找多個單詞組成的字符串
在調用變量時,也應該使用雙引號

3.grep經常使用選項
經常使用的grep選項有:
-c只輸出匹配行的計數。
-i不區分大小寫(只適用於單字符)。
-h查詢多文件時不顯示文件名。
-l查詢多文件時只輸出包含匹配字符的文件名。
-n顯示匹配行及行號。
-s不顯示不存在或無匹配文本的錯誤信息。
-v顯示不包含匹配文本的全部行。

4.grep和正則表達式
使用正則表達式使模式匹配加入一些規則,所以能夠在抽取信息中加入更多選擇。使用
正則表達式時最好用單引號括起來,這樣能夠防止 grep中使用的專有模式與一些 shell命令的
特殊方式相混淆。
        一、模式範圍
        抽取代碼爲4 8 4和4 8 3
        #grep '48[34]' datafile
        二、不匹配行首
        抽出記錄,使其行首不是4 8
        #grep '^[^48]' datafile
        三、設置大小寫
        使用- i開關,能夠屏蔽大小寫或者使用 [ ]模式
        #grep '[Ss]ept' datafile
         若是在知足上述條件的狀況下還需知足必須包含483.則
        #grep '[Ss]ept' datafile | grep 483
        四、匹配任意字符
        以L開頭,以D結尾的全部代碼
        #grep 'K...D' datafile
        頭兩個是大寫字母,中間兩個任意,並以 C結尾
        #grep '[A-Z][A-Z]..C' datafile
        五、日期查詢
        查詢全部以 5開始以1996或1998結尾的全部記錄
        #grep '5..199[6,8]' datafile
        六、範圍組合
        獲取第一列代碼
        #grep '^[0-9][0-5][0-6]' datafile
        七、模式出現機率
        包含數字4至少重複出現兩次的全部行
        #grep '4\{2,\}' datafile
        取記錄使之包含數字999(三個9)
        grep '9\{3,\}' datafile
        查詢重複出現次數必定的全部行,語法以下,數字 9重複出現兩次
        grep '9\{2\}' datafile
        重複出現次數在必定範圍內  
        匹配數字8重複出現2到6次,並以3結尾
        #grep '6\{2,6\}3' datafile
        八、使用grep匹配"與"或者"或"模式
        grep命令加- E參數,這一擴展容許使用擴展模式匹配
        獲取代碼爲 219或216,
        #grep -E '219|216' datafile
        九、空行
        結合使用^和$可查詢空行。使用- n參數顯示實際行數:
        #grep '^$' datafile
        十、匹配特殊字符
        諸如$.'"*[]^|\+?,必須在特定字符前加\
        #grep '\.' datafile
        或者
        #grep '\"' datafile
        如要查詢文件名controll.conf
        #grep 'controll\.conf' /PATH/TO/SOME
        十一、查詢格式化文件名
        在某目錄中查找六個小寫字符,後跟句點,接着是兩個大寫字符格式的文件
        #grep '^[a-z]\{1,6\}\.[A-Z]\{2\}' /PATH/TO/SOME
        十二、查詢IP地址
        #grep '[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}' ipfile
        1三、類名
        [[:upper:]][A-Z]     [[:alnum:]][0-9a-zA-Z]
        [[:lower:]][a-z]     [[:space:]]空格或tab鍵
        [[:digit:]][0-9]     [[:alpha:]][a-zA-Z]
        舉例
        查找以5開頭,後跟至少兩個大寫字母。
        #grep '5[[:upper:]][[:upper:]]' datafile
五、egrep
egrep表明expression或extendedgrep,適狀況而定。egrep接受全部的正則表達式,egrep
的一個顯著特性是能夠以一個文件做爲保存的字符串,而後將之傳給egrep做爲參數.
        一、查看在系統中是否有賬號louise、matty或pauline,
        使用who命令並管道輸出至egrep
        who | egrep (louise|matty|pauline)
        二、還可使用^符號排除字符串。若是要查看系統上的用戶,但不包括 matty和pauline
        who | egrep -v '^(matty|pauline)'
        三、若是要查詢一個文件列表,包括shutdown,shutdowns,reboot和reboots,使用egrep可容
        易地實現
        #egrep '(shutdown | reboot) (s)?' /PATH/TO/SOME正則表達式

相關文章
相關標籤/搜索