grep是linux使用最廣泛的命令之一。grep允許對文本文件進行模式查找。如果找到匹配的模式,grep會打印包含模式在內的所有行,grep可分爲3種模式進行討論,grep的三種變形:
第一部分 基本正則表達式--grep
1 “ . ” 表示任意單個字符
2 ” * “ 表示緊挨其前面字符出現任意次,至少別匹配一次
可以看出b前的至少要有一個a,沒有a的就匹配單個b
3. ” .* “ 表示任意字符任意內容(a和b之間任意字符都可以匹配到)
4 ^ 和$表示行首和行尾
5 ^$ 表示空白行(空行,一般可以通過吧空行過濾出來,來除去文件的空行)
6 \?這個和 * 的用途是一樣的------
7. \{m,n\} 表示比配前面字符至少m次,至多n次
當m=0次時,匹配的就沒有下限了,可以沒有前面的呢個字符
當n=0時,匹配就沒有上限,只要有都算在匹配的內容之內
8. \<\>字符集的錨定,所截取一定是完整的單詞
9. 表示分組-----\(patter\)這樣的可是,匹配這字符集的內容
[ ] 和[ ^ ] 表示中括號內的內容和非中括號的內容
[:space:]-----表示空白行,這個和^$有很大的區別,^$本能作爲一個字符去匹配但是space可以,例如檢索/etc/inittab中
[:lower:]-----表示所有小寫字母
[:upper:]-----表示所有大寫字母
[:digit:]-----表示所有數字
[:punct:]-----表示任意標點符號
[:alnum:]-----表示任意字母(不分大小寫)
[:alpha:]------表示任意字母和數字
第二部分 擴展的正則表達式(這裏就不舉例子了,其實和grep十分相似)
1. + 表示匹配前一個至少一次,和*以及\?用法是一樣的
2. ? 實際上就是\? 去掉了轉譯符
3.{n,m} 和grep的\{n,m\}是一樣的
4. a|b 或匹配這個是可以多選一的
加上了()才表示單個字母的或,不然就會表示成a和baa之間的或關係了
5.\<\>和grep是相同的
6.\(\)分組匹配和grep也是相同的
第三部分 grep --option
--color=auto 表示匹配的部分加上顏色
-v 表示出了匹配內容以外的所有內容(可以用這個去除空行)
-o 表示只顯示匹配的內容,多餘的不部分不顯示
-A+數字# 表示顯示匹配的行的下面#行
-B+數字# 表示顯示匹配的行的上面#行
-i 表示匹配時不分大小寫
-r 表示遞歸搜索
grep -E == egrep