正則表達式
一個正則表達式是一個描述了一個字符串集合的模式。正則表達式的構造類似于算術表達式,使用各種各樣的操作符來將更小的表達式連在一起。
Grep能理解兩種不同版本的正則表達式語法:“basic”和“extended”。在GNU grep中,兩種語法可以實現的功能是沒有區別的。在其他實現中,基本(basic)正則表達式表達能力要弱一點。下面的描述適用于擴展的(extended)正則表達式,它與基本正則表達式的區別會在最后做一個總結。
基本的構造塊是匹配單個字符的正則表達式。大部分字符,包括所有字母和數字,是匹配它們自身的正則表達式。任何具有特殊含義的元字符可以通過前置一個反斜杠來引用。
1元字符
方括號表達式(bracket)是一個字符序列,放在 [ 和 ] 當中。它匹配序列中的任何一個字符;如果序列中的第一個字符是脫字符(caret) ^ 那么它匹配不在序列中的任何一個字符。例如,正則表達式 [0123456789] 匹配任何一個數字。
在方括號表達式之中,一個范圍表達式(range)由兩個字符組成,中間用一個連字符 – (hyphen)分隔。它匹配在這兩個字符之間的任何一個字符,使用本地化的序列順序和字符集。(that sorts between the two characters,inclusive, using the locale’s collating sequence and character set.) 例如,在默認的 C locale中,[a-d]與[abcd]等價。
許多 locale 將字符以字典順序排序,在這些 locale 中,[a-d]不與[abcd]等價;例如它可能與[aBbCcDd]等價。
最后,在方括號表達式中有一些預定義 的字符類,如下所示。它們的名字是自說明的,它們是[:alnum:](字母和數字), [:alpha:](字母), [:cntrl:](控制字符), [:digit:](數字), [:graph:](圖形字符), [:lower:](小寫字母),[:print:](可打印字符),[:punct:](標點符號),[:space:](空格),[:upper:](大寫字母),和[:xdigit:](十六進制數字)。
[:alnum:] |
字母和數字 |
[:cntrl:] |
控制字符 |
[:alpha:] |
字母 |
[:print:] |
可打印字符 |
[:lower:] |
小寫字母 |
[:punct:] |
標點符號 |
[:upper:] |
大寫字母 |
[:space:] |
空格 |
[:digit:] |
數字 |
[:graph:] |
圖形字符 |
[:xdigit:] |
十六進制數字 |
|
|
例如, [[:alnum:]] 意思是[0-9A-Za-z],但是后一種表示方法依賴于 locale C和ASCII字符編碼,而前一種是與locale和字符集無關的。(注意這些字符類名中的方括號也是符號名稱的一部分,必須包含在用來為序列定界的方括號之中。)
大多數元字符處于序列中時會失去它們的特殊意義。為了包含一個字面意義(literal)的 ] ,需要將它放在序列的最前。與此相似,為了包含一個字面意義(literal)的^,需要將它放在除了序列最前之外的其他位置。最后,為了包含一個字面意義(literal)的 , 需要將它放在序列最后。
句點符(period) . 匹配任何一個字符。符號\w是[[:alnum:]]的同義詞,\W是[^[:alnum]]的同義詞。
脫字符(caret)^和美元標記(dollar)$分別是匹配一行的首部和尾部的空字串的元字符。
符號\<和\>分別是匹配一個詞的首部和尾部的空字串的元字符。
符號\b匹配一個詞邊緣(edge)的空字串,符號\B匹配不處于一個詞的邊緣的空字串。
2重復操作符
一個正則表達式后面可以跟隨多種重復操作符之一。
? 前的項是可選的,最多匹配一次。
* 前的項可以匹配零次或多次。
+ 前的項可以匹配一次或多次。
{n} 前的項將匹配恰好n次。
{n,} 前的項可以匹配n或更多次。
{n,m} 前的項將匹配至少n詞,但是不會超過m次。
兩個正則表達式可以連接到一起;得出的正則表達式可以匹配任何由兩個分別匹配連接前的子表達式的子字符串連接而成的字符串。兩個正則表達式可以用中綴操作符|將它們聯合到一起,得出的正則表達式可以匹配任何匹配聯合前的任何一個子表達式的字符串。
重復操作符的優先級比連接高,接下來又比選擇的優先級高。一個完整的子表達式可以用圓括號(parentheses)括住來超越這些優先級規則。反向引用 \n 中, n 是一個數字,匹配正則表達式中,以第 n 個圓括號括住的子表達式已匹配的子字符串。
在基本正則表達式中,元字符 ?, +, {, |, (, 和 ) 喪失了它們的特殊意義;作為替代,使用加反斜杠的 (back]2‐slash) 版本 \?, \+, \{, \|, \(, 和 \) 。
傳統的 egrep 不支持元字符 { ,并且一些 egrep 的實現通過支持 \{ 來代替它,因此可移植的腳本應當避免在egrep 中使用 { 模式,應當使用 [{] 來匹配一個字面意義 (literal) 的 { (上面提到大部分元字符放入方括號中會失去特殊意義)。
原創文章,作者:TQT,如若轉載,請注明出處:http://www.www58058.com/73566
主要介紹了grep命令中的正則表達式的用法 ,內容介紹的很詳細,可以適當的加幾個示例進來