元字符 | 做用 | 例子 | 例子說明 |
---|---|---|---|
^ | 行首定位符 | ^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" |
不一樣國家的字符編碼頗有可能不一樣,例如:
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
(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
瑣碎的片斷:code
當須要將元字符看成普通字符匹配的時候,須要轉移字符"\",可是當元字符位於"[]"中時,除了"-"或者"^"極少數元字符之外,其它的自動轉義爲普通字符。字符串
正則表達式從左到右計算,遵循必定的優先級:轉義符"\" > 方括號"[]" > 分組 "()" > 限定符"*,+,?,{}" > 普通字符 > 定位符"^,$" > 或"|"。string
匹配同一種字符可能有多種正則表達式的寫法。it
shell自己不支持正則表達式,可是支持"*","?"等通配符。
支持正則表達式的還有sed命令,awk命令。之後能夠詳述。