grep 正則2

  • 基本正則表達式所定義的元字符
元字符 做用 例子 例子說明
^ 行首定位符 ^ty 匹配"t"開頭,後面緊跟一個"y"的字符串
$ 行尾定位符 txt$ 匹配以"t"結尾,前面兩個字符是"t""x"的字符串
. 單個字符匹配 s. 匹配"s"後面有一個字符的字符串
* 限定符 s* "*"表示匹配其前導字符若干次,包括0次。這裏是匹配有若干個"s"的字符串
[] 字符集匹配 [abc] 表示匹配"a","b"或"c"的字符串
[^] 字符集不匹配 [^abc 表示不匹配"a","b","c"裏的任意字符
() 子表達式 ([0-9]{2})? 匹配兩個或0個數字
x{m,n} 區間表達式 a{2,3} 表示"a"重複2~3次
  • 擴展正則表達式的元字符
元字符 做用 例子 例子說明
+ 限定符,同* s+ "+"表示匹配其前導字符若干次,至少1次
? 限定符 ss? "?"表示前面的字符能夠重複0或1次。這裏是一個"s"後面可能再跟一個"s"
  • POSIX字符集

不一樣國家的字符編碼頗有可能不一樣,例如:
LANG=C:A B C D ... Z a b c d ...z
LANG=zh_TW:a A b B c C d D ... z Zgit

當採用第二種編碼時,[A-Z]之間會包括小寫字母b-z。因此爲了不這種問題,可使用POSIX字符集來使用特定的字符類。正則表達式

字符類 說明
[:alnum:] 匹配任意一個字母或者數字,等價於A-Za-z0-9
[:alpha:] 匹配任意一個字母,等價於A-Za-z
[:digit:] 匹配任意一個數字,等價於0-9
[:lower:] 匹配小寫字母,等價於a-z
[:upper:] 匹配大寫字母,等價於A-Z
[:graph:] 匹配一個看的見的字符,不包括空白字符
[:print:] 匹配一個能夠打印的字符
[:blank:] 匹配空格和tab
[:space:] 匹配一個空白字符,包括空格、tab、換行、分頁符<
[:punct:] 匹配一個標點符號
[:xdigit:] 匹配一個十六進制數字,即0-9,a-f,A-F

【注意】這些字符類要放在方括號中,才能表示字符集匹配:[[:alnum:]] = [A-Za-z0-9]shell

3、grep與正則表達式的例子

(1)簡單匹配bash

#匹配空行 egrep "^$" testfile #匹配全部英文字符 egrep "[a-zA-Z]" testfile #匹配tast或者test egrep "t[ae]st" testfile 
#匹配以字符s開頭,緊跟若干b的文件名 ll | egrep "^sb*" #匹配txt文件 ll | egrep "\.txt$" #這裏的"."須要進行轉義 

(2)複雜一些的匹配編碼

#匹配QQ號碼,第一位不能是0,5位以上的數字。 egrep "[1-9][0-9]{4,}" testfile #匹配IP地址,共4組數字,用"."隔開 egrep "^([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\. #第一組數字 ([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\. #第二組數字 ([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\. #第三組數字 ([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" #第四組數字 testfile #匹配郵箱地址 egrep "^[a-z0-9]([a-z0-9]*[-_]?[a-z0-9]+)*@ ([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$" 

此處注意:區間表達式{}應該寫成"\{\}"表示轉義,實驗中發現加不加"\"轉義都能得出正確結果,可是直接使用基本正則表達式(grep不加-E選項)則不行。因此應該是擴展正則表達式中取消了這個須要轉義字符的地方。spa

4、其餘

瑣碎的片斷:code

  1. 當須要將元字符看成普通字符匹配的時候,須要轉移字符"\",可是當元字符位於"[]"中時,除了"-"或者"^"極少數元字符之外,其它的自動轉義爲普通字符。字符串

  2. 正則表達式從左到右計算,遵循必定的優先級:轉義符"\" > 方括號"[]" > 分組 "()" > 限定符"*,+,?,{}" > 普通字符 > 定位符"^,$" > 或"|"。string

  3. 匹配同一種字符可能有多種正則表達式的寫法。it

  4. shell自己不支持正則表達式,可是支持"*","?"等通配符。

  5. 支持正則表達式的還有sed命令,awk命令。之後能夠詳述。

做者:tyrone_li 連接:https://www.jianshu.com/p/6c04b85d4544 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索