shell正則表示式
阿新 • • 發佈:2020-07-13
什麼是正則表示式?
正則表示式在每種語言中都會有,功能就是匹配符合你預期要求的字串。
為什麼要學正則表示式?
在企業工作中,我們每天做的linux運維工作中,時刻都會面對大量帶有字串的文字配置、程式、命令輸出及日誌檔案等,而我們經常會有迫切的需要,從大量的字串內容中查詢符合工作需要的特定的字串。這就要靠正則表示式。因此,可以說正則表示式就是為過濾字元的需求而生的!
例如:ifconfig的輸出取IP,例如:cat /var/log/messages輸出等
兩個注意事項:
正則表示式應用非常廣泛,存在於各種語言中,例如:php、python、java等。但是我們今天講的linux系統運維工作中的正則表示式,即linux正則表示式,最常用正則表示式的命令就是grep(egrep)、sed、awk,換句話說linux四劍客劍客要想工作的各高效,那一定離不開正則表示式配合的。
正則表示式和我們常用的萬用字元特殊字元是用本質去別的,這一點要注意。萬用字元例子:ls .log**這裡的就是萬用字元(表示所有),不是正則表示式
Shell 正則表示式分為兩種:
- 基礎正則表示式:BRE(basic regular express)
- 擴充套件正則表示式:ERE(extend regular express),擴充套件的表示式有+、?、|和()
下面是一些常用的正則表示式符號
正則表示式 描述 \ 轉義符,將特殊字元進行轉義,忽略其特殊意義 ^ 匹配行首,awk中,^則是匹配字串的開始 $ 匹配行尾,awk中,$則是匹配字串的結尾 . 匹配除換行符\n之外的任意單個字元,awk則中可以 [] 匹配包含在[字元]之中的任意一個字元 [^ ] 匹配[^字元]之外的任意一個字元 [1] 匹配不是中括號內任意一個字元開頭的行 [ - ] 匹配[]中指定範圍內的任意一個字元,要寫成遞增 ? 匹配之前的項1次或者0次 + 匹配之前的項1次或者多次 * 匹配之前的項0次或者多次 () 匹配表示式,建立一個用於匹配的子串 { n } 匹配之前的項n次,n是可以為0的正整數 {n,} 之前的項至少需要匹配n次 {n,m} 指定之前的項至少匹配n次,最多匹配m次,n<=m | 交替匹配|兩邊的任意一項 < 邊界符,匹配字串開始 > 邊界符,匹配字串結束
在Shell下使用這些正則表示式處理文字最多的命令有下面幾個工具:
命令 描述
grep 預設不支援擴充套件表示式,加-E選項開啟ERE。如果不加-E使用花括號要加轉義符{}
egrep 支援基礎和擴充套件表示式
awk 支援egrep所有的正則表示式
sed 預設不支援擴充套件表示式,加-r選項開啟ERE。如果不加-r使用花括號要加轉義符{}