Linux grep正則表達(dá)式的用法,學(xué)好即可旁通其他語言正則表達(dá)式
編輯:狂族晨曦 來源:腳本編程,系統(tǒng)運(yùn)維,經(jīng)驗(yàn)雜筆 日期:2016-05-15 閱讀: 4,651 次 9 條評(píng)論 » 百度已收錄
先森培訓(xùn)紅帽Linux之前,得知要也會(huì)教正則表達(dá)式,先森是感到非常高興的。因?yàn)樵谙壬挠∠笾校齽t表達(dá)式是非常難懂難學(xué)的,既然有教,一定要學(xué)好。本來已經(jīng)做好面對(duì)困難的決心,直到老師教grep正則表達(dá)式的時(shí)候才發(fā)現(xiàn),原來這么簡(jiǎn)單。而且老師也說了,只要學(xué)會(huì)了用grep正則表達(dá)式,學(xué)習(xí)java等其他語言的正則表達(dá)式也就簡(jiǎn)單了。

redhat linux grep
下面先森對(duì)自己的學(xué)習(xí)做一個(gè)總結(jié),畢竟代碼總是易忘的。本文敘述的是用grep來使用正則表達(dá)式,實(shí)際上Linux使用正則表達(dá)式的命令工具不止于此。
Linux grep命令
grep是一種強(qiáng)大的文本搜索工具,它能使用正則表達(dá)式搜索文本,并把匹配的行打印出來。grep很有使用價(jià)值,先森在學(xué)習(xí)之后就在《用Linux分析日志查看產(chǎn)生大量404的IP》一文中有過應(yīng)用。
grep按下述方式接受選項(xiàng)和參數(shù):
grep [options] regex [files]
其中options是以下的選項(xiàng),regex是正則表達(dá)式,files是需要進(jìn)行搜索的文本文件。gerp支持的選項(xiàng)如下:
-
-a 不要忽略二進(jìn)制數(shù)據(jù)。
-
-A<顯示列數(shù)> 除了顯示符合范本樣式的那一行之外,并顯示該行之后的內(nèi)容。
-
-b 在顯示符合范本樣式的那一行之外,并顯示該行之前的內(nèi)容。
-
-c 計(jì)算符合范本樣式的列數(shù)。
-
-C<顯示列數(shù)>或-<顯示列數(shù)> 除了顯示符合范本樣式的那一列之外,并顯示該列之前后的內(nèi)容。
-
-d<進(jìn)行動(dòng)作> 當(dāng)指定要查找的是目錄而非文件時(shí),必須使用這項(xiàng)參數(shù),否則grep命令將回報(bào)信息并停止動(dòng)作。
-
-e<范本樣式> 指定字符串作為查找文件內(nèi)容的范本樣式。
-
-E 將范本樣式為延伸的普通表示法來使用,意味著使用能使用擴(kuò)展正則表達(dá)式。
-
-f<范本文件> 指定范本文件,其內(nèi)容有一個(gè)或多個(gè)范本樣式,讓grep查找符合范本條件的文件內(nèi)容,格式為每一列的范本樣式。
-
-F 將范本樣式視為固定字符串的列表。
-
-G 將范本樣式視為普通的表示法來使用。
-
-h 在顯示符合范本樣式的那一列之前,不標(biāo)示該列所屬的文件名稱。
-
-H 在顯示符合范本樣式的那一列之前,標(biāo)示該列的文件名稱。
-
-i 忽略字符大小寫的差別。 -l 列出文件內(nèi)容符合指定的范本樣式的文件名稱。
-
-L 列出文件內(nèi)容不符合指定的范本樣式的文件名稱。
-
-n 在顯示符合范本樣式的那一列之前,標(biāo)示出該列的編號(hào)。
-
-q 不顯示任何信息。
-
-R/-r 此參數(shù)的效果和指定“-d recurse”參數(shù)相同。
-
-s 不顯示錯(cuò)誤信息。
-
-v 反轉(zhuǎn)查找。
-
-w 只顯示全字符合的列。
-
-x 只顯示全列符合的列。
-
-y 此參數(shù)效果跟“-i”相同。
-
-o 只輸出文件中匹配到的部分。
-
--color:以特定顏色高亮顯示匹配關(guān)鍵字
--color選項(xiàng)可以讓搜索匹配結(jié)果高亮,是個(gè)很有用的選項(xiàng)。
需要注意的是,grep命令使用正則表達(dá)式分為基本正則表達(dá)式和擴(kuò)展正則表達(dá)式。我們一般使用"grep -E"或者"egrep"來使用擴(kuò)展正則表達(dá)式。擴(kuò)展正則表達(dá)式的功能更加強(qiáng)大。
命令中加入正則表達(dá)式時(shí),最好使用引號(hào)將表達(dá)式括起來,以避免shell的元字符對(duì)正則表達(dá)式的影響。
基本正則表達(dá)式
正則表達(dá)式的學(xué)習(xí),主要就是對(duì)各種字符的作用進(jìn)行學(xué)習(xí),使用中則主要是將各種功能的字符進(jìn)行組合,以達(dá)到我們的目標(biāo)匹配。雖然grep正則表達(dá)式分為基本正則表達(dá)式和擴(kuò)展表達(dá)式,但基本表達(dá)式已經(jīng)能滿足我們的基本需求了。下面來介紹一下各種正則表達(dá)式字符:
| 符號(hào) | 含義 | 舉例 |
| ^ | 開始標(biāo)記 | "^abc"滿足的例子abc、abcd |
| ^ | 非(在[]內(nèi)) | "[^abc]"滿足的例子:ddd、mpd |
| $ | 結(jié)束標(biāo)記 | "abc$"滿足的例子abc、mmabc |
| \< | 匹配單詞開始 | "\<abc"滿足的例子abc、abcd |
| \> | 匹配單詞結(jié)束 | "abc\>"滿足的例子abc、pmrabc |
| . | 任意一個(gè)字符 | "a.c"滿足的例子abc、fapcc |
| * | 匹配前一個(gè)字符≥0次 | "abc*"滿足的例子abbb(c出現(xiàn)0次)、abcdk |
| \ | 轉(zhuǎn)義字符 | "\."滿足的例子192.168 |
| [] | 匹配一系列字符中的一個(gè) | "[abc]"滿足的例子any、boy、ico |
| - | 連字符,用在[]中,規(guī)定匹配范圍 | [a-z]匹配小寫字母,[0-9]匹配數(shù)字,[0-9a-zA-Z]匹配數(shù)字與字母 |
| {} | {m}、{m,n}、{m,}、{,n}分別為匹配前一個(gè)字符m次、m到n次、≥m次、≤n次 |
"abc\{3,5\}"滿足的例子abcccc、abcccccc 注意,由于{ }在SHELL中有特殊意義,因此作為正則表達(dá)式用的時(shí)候要用\轉(zhuǎn)義一下(若用egrep則不轉(zhuǎn)義)。 |
擴(kuò)展正則表達(dá)式
grep一般情況下支持基本正則表達(dá)式,可以通過參數(shù)-E支持?jǐn)U展正則表達(dá)式。所以grep單獨(dú)提供了一個(gè)擴(kuò)展命令叫做egrep用來支持?jǐn)U展正則表達(dá)式,這條命令和grep -E等價(jià)。雖然一般情況下,基本正則表達(dá)式就夠用了。特殊情況下,復(fù)雜的擴(kuò)展表達(dá)式,可以簡(jiǎn)化字符串的匹配。
擴(kuò)展正則表達(dá)式就是在基本正則表達(dá)式的基礎(chǔ)上,增加了一些匹配字符。
| 符號(hào) | 含義 | 舉例 |
| + | 匹配前一個(gè)字符≥1次 | "abc+"滿足的例子abcd、abcccdd |
| ? | 匹配前一個(gè)字符0或1次 | "abc?"滿足的例子ab、mabcd |
| | | 或 | "AAA|BBB"滿足的例子AAA、BBBpp |
| () |
匹配整個(gè)括號(hào)內(nèi)的字符串(原來都是匹配單個(gè)字符) |
"g(oo|la)d"滿足的例子good、glad |
| () | 反向引用,最多使用9次,用\*調(diào)用(*代表1-9),以左括號(hào)確定編號(hào) | "([a-z]+)([0-9]+)\1\2\1"(\1引用第一個(gè)括號(hào)內(nèi)的匹配結(jié)果,\2引用第二個(gè)括號(hào)的匹配結(jié)果)滿足的例子abc12abc12abc、a1a1a(注:a1a2c則不滿足) |
最后
相對(duì)而言,grep正則表達(dá)式還是非常簡(jiǎn)單的。需要注意的是,花括號(hào){}在grep中使用需要加反斜杠\轉(zhuǎn)義,而在grep -E或egrep中則不用轉(zhuǎn)義。
轉(zhuǎn)載請(qǐng)注明出處來自http://www.cnidcc.cn/linux_grep_zzbds.html

川公網(wǎng)安備 51011202000104號(hào)
正則表達(dá)式萬變不離其宗
你們這做技術(shù)的太牛了,寫的這些完全看不懂啊!
最煩的就是這些東西呀
@純潔博客: 但是確實(shí)好用啊
正則參數(shù)這么多,看著都暈0.0
一直不是很懂正則表達(dá)式。看很多時(shí)候都會(huì)用到的。
太難掌握了~~
以前學(xué)Java時(shí)用過,現(xiàn)在都還給老師了。
正則的確很強(qiáng)大~