若是咱們對特定的某個字符操做的話,相對來講很簡單,好比tom,mary。若是我須要操做的這些字符,他們不是具體的某些字符,好比第一個字符是字母,第二個是數字,第三個是特殊字符等。在咱們現實生活中,咱們可使用一些特殊的字符表示,好比△字母,○表示數字,表示特殊字符。git
二、Grep的基本用法正則表達式
Grep也支持正則表達式,由於grep比較簡單,因此咱們就用grep來讓你們理解什麼是正則表達式。ide
Grep的做用是用來過濾含有特定字符的行。spa
用法:grep 關鍵字 file3d
由於咱們如今過濾的是比較簡單的一個關鍵字。但若是說我要過濾一些特定字符的文件該如何完成?blog
咱們能夠這樣來作:grep △○ file get
紙上能夠這樣寫,可是計算機並不識別這些符號△○,因此就引入元字符的概念。it
三、正則表達式元字符:io
文件aa內容:class
^ 表示行開頭,下圖表示匹配以tom開頭的行
$ 表示行尾,下圖表示匹配以tom結尾的行
. 表示單個字符,能夠匹配除了換行符以外的全部字符。下圖表示匹配包含tom及後面的任意三個字符的行:
* 表示其前面的字符能夠出現任意次,包括0次
+ 表示其前面的字符至少要出現一次:
這個命令裏面使用了-E選項,意思是使用擴展的grep,由於grep所能使用的元字符有限。
元字符*和+都是貪婪型的,即最長匹配。見下圖:
有時候咱們須要最短匹配,又叫懶惰型匹配。匹配時只要在*後面加?便可。
?表示其前面的字符能夠有,也能夠沒有。
注意:grep不支持+和? 這些元字符,若是要使用,須要擴展的grep(egrep或grep -E)。
[] 表示匹配一個字符,出如今[]裏面的字符都是「或」的關係。
^ 若是是出如今[]外面的話,表示開頭的意思,若是出如今[]裏面的話,表示否認的意思。
剛纔^和$,表示匹配行的開頭和結尾,若是要匹配單詞的開頭,要使用:\<
\> 表示匹配單詞的結尾:
\btomb\ 表示只匹配單詞爲tom的行:
正則表達式中,也能夠作標籤,若是匹配模式中給某一部分作了一個標籤,咱們在後面就能夠直接引用他。若是咱們想對某一部分作標籤的話,只要使用\(\)括起來就能夠了,引用就使用\n(n表示一個數字)。好比第一個被\(\)引發來的部分,引用就使用\1。
\{n\} 表示匹配其前面的字符n次,以下圖:
\{n,\} 表示匹配其前面的字符至少n次,以下圖:
\{n,m\} 表示匹配其前面的字符至少n次,至多m次,以下圖:
[0-9] 表示匹配數字
\d 也能夠表示匹配數字:
\D 表示匹配非數字
\s 表示空格或tab
\S 表示不能是空格或tab
\w 表示任意字符(大小寫字母、數字、下劃線)
\W 表示不能是字母、數字和下劃線
正則表達式也支持國際字符:
[[:digit:]] 表示數字
[[:alpha:]] 表示字母,包括大小寫
[[:upper:]] 表示大寫字母
[[:lower:]] 表示小寫字母