通過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
grep命令的選項有: * -n:表示顯示行號; * -i:表示不區分大小寫; * -v:表示反向查找。
2)查找不包含“the”的行
[root@localhost ~]# grep -vn 'the' test.txt
3)查找以sh開頭,以rt結尾,中間是i或o的字符
[root@localhost ~]# grep -n 'sh[io]rt' test.txt
4)查詢oo前面不是w的字符串
[root@localhost ~]# grep -n '[^w]oo' test.txt
5)查詢oo前面不是小寫字母的字符串
[root@localhost ~]# grep -n '[^a-z]oo' test.txt
6)^匹配以某個字符開頭的行。查詢以the開頭的字符串
[root@localhost ~]# grep -n '^the' test.txt
7)[^]匹配未包含的一個任意字符。查詢不以字母開頭的字符串
[root@localhost ~]# grep -n '^[^a-zA-Z]' test.txt
8)$匹配以某個字符結尾的行。查詢以.結尾的字符串
[root@localhost ~]# grep -n '\.$' a.txt //其中小數點“.”具有特殊意義,所以需要使用轉義字符“\”將具有特殊意義的字符轉化爲普通字符
9)“.”匹配除\r\n外的任意一個字符。查詢w與d之間包含兩個字符的行
[root@localhost ~]# grep -n 'w..d' test.txt
10)查詢包含連續o字母的行
[root@localhost ~]# grep -n 'ooo*' test.txt //“*”表示的是重複零個或多個前面的單字符
11)查詢以w開頭以d結尾中間至少包含一個o的行
[root@localhost ~]# grep -n 'woo*d' test.txt
12)查詢以w開頭d結尾,中間的字符可有可無的行
[root@localhost ~]# grep -n 'w.*d' test.txt
13){n}匹配確定的n次。查詢包含兩個o的行
[root@localhost ~]# grep -n 'o\{2\}' test.txt //“{}”是特殊字符需要用“\”轉義
14)查詢以w開頭d結尾,中間包含2~5個o的行
[root@localhost ~]# grep -n 'wo\{2,5\}' test.txt // {n,m}最少匹配n次且最多m次
15)查詢以w開頭以d結尾,中間包含2個以上o的行
[root@localhost ~]# grep -n 'wo\{2,\}' test.txt // {n,}至少匹配n次
基礎正則表達式常見元字符總結
二、擴展正則表達式
通常情況下會使用基礎正則表達式就已經足夠了,但是爲了簡化整個指令,需要使用範圍更廣的擴展正則表達式。
在Linux系統常見的文本處理工具中egrep與awk支持擴展正則表達式,egrep命令與grep命令的用法基本相似。
擴展正則表達式常見元字符總結
正則表達式就簡單介紹這麼多,等以後有需要了,會實時更新的!