Linux Shell環境下提供了兩種Regex規則,一個是基本Regex(BRE),另一個是擴充Regex(ERE)。
下面是這兩種運算式的文法列表,需要注意的是,如果沒有明確指出的Meta字元,其將可同時用於BRE和ERE,否則將盡適用於指定的模式。
正則元字元 |
模式含義 |
用例 |
\ |
通常用於關閉其後續字元的特殊意義,恢複其原意。 |
\(...\),這裡的括弧僅僅表示括弧。 |
. |
匹配任何單個字元。 |
a.b,將匹配abb、acb等 |
* |
匹配它之前的0-n個的單個字元。 |
a*b,將匹配ab、aab、aaab等。 |
^ |
匹配緊接著的Regex,在行的起始處。 |
^ab,將匹配abc、abd等,但是不匹配cab。 |
$ |
匹配緊接著的Regex,在行的結尾處。 |
ab$,將匹配ab、cab等,但是不匹配abc。 |
[...] |
方括號運算式,匹配其內部任何字元。其中-表示連續字元的範圍,^符號置於方括弧裡第一個字元則有反向的含義,即匹配不在列表內(方括弧)的任何字元。如果想讓]和-表示其原意,需要將其放置在方括弧的首字元位置,如[]ab]或[-ab],如這兩個字元同時存在,則將]放置在首字元位置,-放置在最尾部,如[]ab-]。 |
[a-bA-Z0-9!]表示所有的大小寫字母,數字和驚嘆號。[^abc]表示a、b、c之外的所有字元。[Tt]om,可以匹配Tom和tom。 |
\{n,m\} |
區間運算式,匹配在它前面的單個字元重複出現的次數區間,\{n\}表示重複n次;\{n,\}表示至少重複n次;\{n,m\}表示重複n到m次。 |
ab\{2\}表示abb;ab\{2,\}表示abb、abbb等。ab\{2,4\}表示abb、abbb和abbbb。 |
\(...\) |
將圓括弧之間的模式儲存在特殊“保留空間”。最多可以將9個獨立的子模式儲存在單個模式中。匹配於子模式的文本,可以通過逸出序列\1到\9,被重複使用在相同模式裡。 |
\(ab\).*\1表示ab組合出現兩次,兩次之間可存在任何數目的任何字元,如abcdab、abab等。 |
{n,m}(ERE) |
其功能等同於上面的\{n,m\},只是不再寫\轉義符了。 |
ab+匹配ab、abbb等,但是不匹配a。 |
+(ERE) |
和前面的星號相比,+匹配的是前面Regex的1-n個執行個體。 |
|
?(ERE) |
匹配前面Regex的0個或1個。 |
ab?僅匹配a或ab。 |
|(ERE) |
匹配於|符號前後的Regex。 |
(ab|cd)匹配ab或cd。 |
[:alpha:] |
匹配字母字元。 |
[[:alpha:]!]ab$匹配cab、dab和!ab。 |
[:alnum:] |
匹配字母和數字字元。 |
[[:alnum:]]ab$匹配1ab、aab。 |
[:blank:] |
匹配空格(space)和Tab字元。 |
[[:alnum:]]ab$匹配1ab、aab。 |
[:cntrl:] |
匹配控制字元。 |
|
[:digit:] |
匹配數字字元。 |
|
[:graph:] |
匹配非空白字元。 |
|
[:lower:] |
匹配小寫字母字元。 |
|
[:upper:] |
匹配大寫字母字元。 |
|
[:punct:] |
匹配標點字元。 |
|
[:space:] |
匹配空白(whitespace)字元。 |
|
[:xdigit:] |
匹配十六進位數字。 |
|
\w |
匹配任何字母和數字組成的字元,等同於[[:alnum:]_] |
|
\W |
匹配任何非字母和數字組成的字元,等同於[^[:alnum:]_] |
|
\<\> |
匹配單詞的起始和結尾。 |
\<read匹配readme,me\>匹配readme。 |
下面的列表給出了Linux Shell中常用的工具或命令分別支援的Regex的類型。
|
grep |
sed |
vi |
egrep |
awk |
BRE |
* |
* |
* |
|
|
ERE |
|
|
|
* |
* |
本文摘自:http://www.atatech.org/article/detail/2894/338