《Sed 和 Awk》(第二版)學習系列之第三章

第三章 正則表達式語法
1. 元字符彙總:
通配符:
。---------------------匹配除換行符以外的任何單個字符,在awk中也能匹配換行符
*-----------------------匹配任意一個(包括零個)在它前面的字符(串)
[…]---------------------匹配方括號中的字符類中的任意一個,若方括號中第一個字符爲脫字符號(^),則表示否定匹配,即匹配除了換行符和括號中列出的所有字符以外的字符,在awk中也匹配換行符;連字符(-)表示字符的範圍;若類中的第一個字符爲右方括號(]),則表示它是類的成員,所有其他的元字符在被指定爲類中的成員時都將失去它原來的含義。
^----------------------若作爲正則表達式的第一個字符,則表示匹配行的開始,在awk中匹配字符串的開始,即使字符串包含嵌入的換行符。
$----------------------若作爲正則表達式的最後一個字符,則表示匹配行的結尾,在awk中匹配字符串的結尾,即使字符串包含嵌入的換行符。
\{n,m\}--------------匹配它前面某個範圍內單個字符出現的次數,\{n\}將匹配n次出現,\{n,\}將至少匹配n次出現,而且\{n,m\}將匹配n和m之間(閉區間)的任意次出現。
【注意】這個元字符在某些老版本上不能使用!
\-----------------------用來屏蔽一個元字符的特殊含義。
擴展的元字符:(egrep, awk)
+----------------------匹配前面的正則表達式的一次或多次出現
?----------------------匹配前面的正則表達式的零次或一次出現
|-----------------------指定可以匹配其前面的或後面的正則表達式
()---------------------對正則表達式進行分組
{n,m}---------------匹配它前面某個範圍內單個字符出現的次數。{n}表示匹配n次出現,{n,}至少匹配n次出現,{n,m}匹配n和m之間的任意次出現。

(1)對通配符*的理解:
“*”表示匹配任意一個(或者零個)在它前面的字符(串),換句話說,一個單字符後緊跟*,則匹配0個或者多個此字符
books*---------------------可以用來匹配book, books
(2) 兩個通配符結合使用的情況:
book.*------------------------用來匹配book後有任意個字符或沒有字符
(3) 定位元字符(^$)
^$------------------可以用來匹配空行
(4) 短語的匹配:通過編寫一系列正則表達式來捕獲一個短語

(5) 對字符跨度元字符的理解:注意這個元字符均設置了查找字符的範圍,比通用元字符更加具體。
10\{2,4\}1-------------匹配1001,10001,100001
grep '[0-9]\{3\}-[0-9]\{8\}' telephone-----------------------匹配查找電話號碼
(6) 注意元字符在匹配字符個數上的差異。
(7) 擴展元字符只能在egrep和awk中使用,sed中沒有此類元字符!
(8) 選擇性操作:|
Unix|Linux
(9) 分組操作:() 用於對正則表達式進行分組並設置優先級
BigOne( Computer)? -----------------------可以匹配BigOne或者BigOne Computer

【舉例分析】

 

利用列舉單詞前後可能出現的字符集來匹配原文本文件含book相關信息的行

(^|  )………….(  |$)是用來彌補book出現在行頭或者行尾這兩種特殊情況。

(10) 正則表達式總是嘗試匹配最長的字符串,爲了解決這個限制,可以嘗試用 \{n,m\}等相關元字符進行範圍限制!

(11) 一些有用的正則表達式:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章