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