1. 程式人生 > 其它 >grep命令詳解與正則表示式

grep命令詳解與正則表示式

grep命令主要是做什麼的呢 ?下面我們就來研究下。

grep命令簡單來說就是“過濾”。就是把想看的資料通過grep過濾出來,把不想看的通過grep過濾掉。

它是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來,Unix的grep家族包括(egrep,fgrep,grep)。egrep和fgrep的命令跟grep有所不同,egrep是grep的擴充套件,支援更多的re元字元,fgrep表示就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說正則表示式中的元字元表示自身的意思,不再特殊,linux使用的GNU版本的grep本身就強大,可以通過-G,-E,-F 命令列來選項egrep和fgrep的功能。

選項:

-A # --after 表示後#行 

-B #  --before 表示前#行

  -C #   --context 表示“前後”各#行      

-D --devices 設定對裝置,FIFO,管道的操作,讀取,跳過

-E --extended-regexp 擴充套件正則表示式egrep

-F --fixed-strings 一個換行符分隔的字串的集合fgrep

   -G --basic-regexp 基本正則

-H --with-filename 當搜尋多個檔案,顯示匹配的檔名字首

-I 不匹配二進位制的東西 

-L --files-without--math 匹配多個檔案時,顯示不匹配的檔名

   -P -----perl-regexp 呼叫的perl正則

  -R/-r --recursive 遞迴呼叫

-V --version 顯示版本資訊

-U --binary 使用標誌高亮匹配字串

小寫選項:

-a --text 不要忽略二進位制資料

   -b --byte-offset 列印匹配行前面答應該行所在的塊行碼

   -c --count 顯示匹配的行數

   -d --directories 目錄操作,讀取,遞迴跳過

-e --regexp 指定字串作為查詢檔案內容範本樣式

-f ---file 從檔案中獲得匹配模式

-h --no--filename 當搜尋多個檔案,不顯示檔名的字首

-i --ignore-case 不區分大小寫

-l --files-with-matches 匹配多個檔案時,顯示匹配的檔名

   -n --line-number 顯示的內容加上行號

-q --quiet,--silent 不顯示任何東西

   -s --no-messages 不顯示錯誤資訊

   -v --invert-match 顯示不匹配的行

-w --word-regexp 匹配整個單詞

-x --line-regexp 匹配整行

-y 此選項跟-i選項相同

-o --only-matching 只顯示一行中匹配PATTERN的資料

  -m --max-count 匹配的最大數

*注:單詞由字母,數字,下劃線組成

正則表示式:^ 表示以^grep開頭的行

     $ 表示行尾錨定,用於模式的最右側  

    . 表示任意單個字元  

      * 匹配前面的字元任意次

      .*  任意長度字元

     []  匹配指定的範圍內的內容

       [^] 匹配不在範圍的內容

        \(..\) 標記匹配字元,如\(love\) ,love被標記為1

      \< 錨定單詞的開始,即詞首錨定,用於單詞模式的開始

        \> 錨定單詞的詞尾,即詞尾錨定,用於單詞模式的結束,鎖定單詞的結束

       \{n\}  匹配前面的字元n次

    \{,n\}  匹配前面的字元至多n次, <=n

    \{m,n\}  匹配前面的字元至少m次,最多n次

    \{n,\}  匹配前面的字元至少n次, 最多無限次

    \+ 匹配前面的字元出現最少1次, 即:肯定有且>=1次

    \?    匹配前面的字元出現0次或1次,即:可有可無

    ^$  空行

    ^[[:space:]]*$ 空白行

    ^PATTERN$ 用於模式匹配整行

    \<PATTERN\> 匹配整個單詞

    \| 或者

   () 將多個字元捆綁在一起,當作一個整體處理

   後向引用:\(string\string2\)\)

        1\:string\(string2\)

        2\:string2