編寫shell指令碼時經常用到的基本操作就是尋找包含特定文字的行,雖然用簡單的grep命令可以完成一些簡單的工作,但是正則表示式無疑是繞不開的。本文主要介紹基本正則表示式。

總的來說,正則表示式由兩部分組成:一般字元和特殊字元。特殊字元(meta)在正則表示式中往往具有特殊的意義。

先介紹幾個簡單的特殊字元:

(1) .  代表任意的單個字元

(2) *  匹配在它之前的任意數目的單個字元

(3) ^  匹配其後面緊接著的正則表示式在行起始處

(4) $  匹配其前面的正則表示式在行末尾

(5) []  匹配方括號裡面的任意一個字元

舉幾個例子:

表示式 tolstoy  匹配位於一行上任何位置的7個字母:tolstoy

表示式 ^tolstoy 匹配tolstoy出現在行首的行。比如:tolstoyabc defghi jkl

表示式 tolstoy$ 匹配tolstoy出現在行首的行。比如:abc defghi jkltolstoy

表示式 ^tolstoy$ 匹配正好為tolstoy的行,沒有其他字母。

表示式 [Tt]olstoy 匹配在一行上的任意位居中,含有Tolstoy或者tolstoy的行

表示式 tol.toy 匹配在一行上的任意位居中,含有tol這3個字母,加上任何一個字元,再接著toy這3個字母。

表示式 tol.*toy 匹配在一行的任意位居中,含有tol這3個字幕,加上任意個(0或多個)字元,再加上toy這3個字母。

另外,可以用[: :]的方式表達某些字符集。

比如[:alnum:]表示數字字元,[:alpha:]表示字母字元,[:lower:]表示小寫字母字元,[:upper:]表示大寫字母字元等等。

使用的時候,比如表示式 ab[[:alnum:]]cd 匹配包含ab這2個字元,接著一個任意數字,再接著cd字元的行,比如ab1cd,ab3cd等等。注意有兩個方括號。為什麼呢?請看看方括號特殊字元的意義。

後向引用:匹配正則表示式前面的部分。意思就是對一個正則表示式的某一部分做個標記,後面用數字代替。舉個例子。 表示式 \(ab\)\(cd\)[def]*\2\1 匹配含有abcd接著def中間的任意0個或多個再接cdab,比如abcdcdab、abcdeeecdab,abcdddeeffcdab等等。這裡的 \(ab\)就是對ab做個標記,這是第一個標記,\(cd\)是第二個標記,後面的\2就是指的cd,也就是第二個標記,\1也就是指的ab。

區間表示式:能匹配出現一定次數的某個字元。其格式是將一個或兩個數字放在\{與\}之間。

\{n\} 表示前置正則表示式所得結果重現n次

\{n,\} 表示前置正則表示式所得結果重現至少n次

\{n,m\}表示前置正則表示式所得結果重現n至m次

比如說a\{5\} 表示重現5個a,q\{10,42\}表示重現10到42個q。

上面就是基本正則表示式的基礎知識,對於一些更加詳細的內容,可以檢視相應的資料。除了基本正則表示式之外,還有擴充套件正則表示式。另外還有sed、awk等程式對文字進行替換等。暫時消化不了那麼多,先到這裡吧。