Shell腳本應用之正則表達式詳解

通過Shell腳本應用(一)Shell腳本應用(二)Shell腳本應用(三)這幾篇博文,我們已經掌握了Shell腳本的編寫規則和各種語句的具體應用,但是實際生產環境中,Shell腳本通常與正則表達式、文本處理工具結合使用。我們就來認識一下“正則表達式(RE)”。

正則表達式概述

1.正則表達式的定義

正則表達式又稱正規表達式、常規表達式。在代碼中常簡寫爲regex、regexp或RE。正則表達式是使用單個字符串來描述,匹配一系列符合某個句法規則的字符串。簡單的說,正則表達式是一種匹配字符串的方法,通過一些特殊符號,實現快速查找、刪除、替換某個特定字符串。

正則表達式作爲一個模板,將某個字符模式與所搜索的字符串相匹配。其中由兩部分組成:
1.普通字符:包括大小寫字母、數字、標點符號及一些其他符號;
2. 元符號:是指那些在正則表達式中具有特殊意義的專用字符。

正則表達式一般用於腳本編程與文本編輯器。很多文本處理器與程序設計語言均支持正則表達式。正則表達式具備很強大的文本匹配功能,能夠在文本海洋中快速高效地處理文本。

2.正則表達式用途

正則表達式對於系統管理員來說是非常重要的,系統運行過程中會產生大量的信息,這些信息中有些是非常重要的,有些僅僅是高中的信息。身爲系統管理員如果直接查看這麼多的信息數據,無法快速定位到非常重要的信息。如“用戶賬號登錄失敗”、“服務啓動失敗”等重要信息。這是便可以通過正則表達式快速提取“有問題”的信息,如此一來,可以將運維工作變得更加簡單、方便。

目前很多軟件也支持正則表達式,最常見的就是郵件服務器。在Internet中,垃圾廣告、郵件等將會造成網絡塞車,如果在服務器端將這些問題提前剔除的話,客戶端就會減少很多不必要的帶寬消耗。

正則表達式的字符串根據不同的嚴謹程度與功能分爲:
1.基本正則表達式;
2.擴展正則表達式。

一、基礎正則表達式

在Linux系統中常見的文件處理工具中grep與sed支持基礎正則表達式,基礎正則表達式以grep命令爲例

基礎正則表達式示例:

1)查找包含“the”的行
[root@localhost ~]# grep -n 'the' test.txt 

Shell腳本應用之正則表達式詳解

grep命令的選項有:
* -n:表示顯示行號;
* -i:表示不區分大小寫;
* -v:表示反向查找。
2)查找不包含“the”的行
[root@localhost ~]# grep -vn 'the' test.txt

Shell腳本應用之正則表達式詳解

3)查找以sh開頭,以rt結尾,中間是i或o的字符
[root@localhost ~]# grep -n 'sh[io]rt' test.txt 

Shell腳本應用之正則表達式詳解

4)查詢oo前面不是w的字符串
[root@localhost ~]# grep -n '[^w]oo' test.txt 

Shell腳本應用之正則表達式詳解

5)查詢oo前面不是小寫字母的字符串
[root@localhost ~]# grep -n '[^a-z]oo' test.txt 

Shell腳本應用之正則表達式詳解

6)^匹配以某個字符開頭的行。查詢以the開頭的字符串
[root@localhost ~]# grep -n '^the' test.txt 

Shell腳本應用之正則表達式詳解

7)[^]匹配未包含的一個任意字符。查詢不以字母開頭的字符串
[root@localhost ~]# grep -n '^[^a-zA-Z]' test.txt 

Shell腳本應用之正則表達式詳解

8)$匹配以某個字符結尾的行。查詢以.結尾的字符串
[root@localhost ~]# grep -n '\.$' a.txt 
//其中小數點“.”具有特殊意義,所以需要使用轉義字符“\”將具有特殊意義的字符轉化爲普通字符

Shell腳本應用之正則表達式詳解

9)“.”匹配除\r\n外的任意一個字符。查詢w與d之間包含兩個字符的行
[root@localhost ~]# grep -n 'w..d' test.txt 

Shell腳本應用之正則表達式詳解

10)查詢包含連續o字母的行
[root@localhost ~]# grep -n 'ooo*' test.txt 
//“*”表示的是重複零個或多個前面的單字符

Shell腳本應用之正則表達式詳解

11)查詢以w開頭以d結尾中間至少包含一個o的行
[root@localhost ~]# grep -n 'woo*d' test.txt 

Shell腳本應用之正則表達式詳解

12)查詢以w開頭d結尾,中間的字符可有可無的行
[root@localhost ~]# grep -n 'w.*d' test.txt 

Shell腳本應用之正則表達式詳解

13){n}匹配確定的n次。查詢包含兩個o的行
[root@localhost ~]# grep -n 'o\{2\}' test.txt 
//“{}”是特殊字符需要用“\”轉義

Shell腳本應用之正則表達式詳解

14)查詢以w開頭d結尾,中間包含2~5個o的行
[root@localhost ~]# grep -n 'wo\{2,5\}' test.txt 
//  {n,m}最少匹配n次且最多m次

Shell腳本應用之正則表達式詳解

15)查詢以w開頭以d結尾,中間包含2個以上o的行
[root@localhost ~]# grep -n 'wo\{2,\}' test.txt 
// {n,}至少匹配n次

Shell腳本應用之正則表達式詳解

基礎正則表達式常見元字符總結

Shell腳本應用之正則表達式詳解

二、擴展正則表達式

通常情況下會使用基礎正則表達式就已經足夠了,但是爲了簡化整個指令,需要使用範圍更廣的擴展正則表達式。

在Linux系統常見的文本處理工具中egrep與awk支持擴展正則表達式,egrep命令與grep命令的用法基本相似。

擴展正則表達式常見元字符總結

Shell腳本應用之正則表達式詳解

正則表達式就簡單介紹這麼多,等以後有需要了,會實時更新的!

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