shell指令碼程式設計學習筆記(2)正則表示式
編寫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等程式對文字進行替換等。暫時消化不了那麼多,先到這裡吧。