shell腳本學習筆記 (正則表達式)
正則表達式一般有三個部分組成,他們各自是:字符類,數量限定符,位置限定符。
規定一些特殊語法表示字符類、數
量限定符和位置關系,然後用這些特殊語法和普通字符一起表示一個模式,這就是正則表達式(Regular Expression)。
我們以一
個樣例開始吧。假如給你一個文件,裏面存放的是IP地址,可是有一些不是合格的。請你找出合格的IP地址。我想不知道正
則表達式的人一定會認為好陌生,我拿一個循環去實現,我之前也被問到過這個問題,也是想著拿循環來完畢。寫出一個函
數來實現這個查找功能實在是不簡單。並且不能保證正確性。
這時候正是正則表達式登場的時候了。以下是我寫的一個正則
表達式:
此時此刻是不是認為挺奇妙的。我當時也感覺到了,上面的五個“IP”地址中。僅僅有一個滿足要求的,我們一條
命令就找出來了,是不是頓時被吸引住了。那麽我們開始正則表達式的探討吧。
1.字符類:
它們在模式中表示一個字符,可是取值範圍是一類字符中的隨意一個。
常見的字符類例如以下:
我寫了一些簡單的代碼來驗證上述字符類
2.數量限定符
數量限定符指明字符類出現的次數,以幫助模式匹配,常見的數量限定符例如以下:
我寫的測試代碼例如以下:
我的使用的是centos,不知道細心的你發現沒有。有一條語法不支持即:{ ,M}。
Z這個在別的linux上是能夠的。
比方ubantu,我想這個問題應該是不同平臺的差異導致的吧。
我在同學的ubantu平臺下測試了是能夠的,這點能夠保證。
3.位置限定符
顧名思義位置限定符使用限定字符類的位置的。比方我們還是拿IP地址來說吧。IP地址分為四個部分。每兩個部分之間
拿 ‘.‘ 隔開,而每一部分都能夠拿字符類和數量限定符描寫敘述。
特殊字符:
1. \ 該字符用於轉移,上面的樣例中使用到 ‘.‘ 的時候都要用 ‘\‘ 轉移一下,否則無法被解釋
2. | ‘|‘ 可用於連接兩個 字表達式
3. () ‘()‘可將莫一部分作為一個總體,然後我們能夠對總體進行操作
到這裏正則表達的語法基本上講完了,以下對以上事例中使用到的工具進行簡單的介紹,grep工具相信大家都知道
吧,linux平臺下的自帶的工具,對grep的介紹我引用搜狗百科的介紹:grep是一種強大的文本搜索工具。它能使用正
則表達式搜索文本,並把匹配的行打印出來。Unix的grep家族包含grep、egrep和fgrep。
利用這些返回值就可進行一
些自己主動化的文本處理工作。 我在上面的樣例中使用的是egrep工具。是grep的擴展,這個工具的很多其它使用方法以及上面介紹
的一些不充分的地方大家能夠去百科上查找一下,事實上另一些更高級的工具也是支持這則表達式的。我將在結下來的
博客中再介紹。
我個人認為死記這些這些字符的意思是不恰當的。我們應該通過不斷的練習來學習正則表達式,這樣才幹達到好的效
果。忘記的時候我們能夠去看一看這些正則表達式的模塊的用處,最後希望對大家有一些幫助。
shell腳本學習筆記 (正則表達式)