1、什麼是正規表達式
簡單的說,正規表達式就是為處理大量的字元串而定義的一套規則和方法
例如:
假設“@”代表oldboy,“!”代表oldgirl。echo "@!"==“oldboyoldgirl”
通過定義的這些特殊符号的輔助,系統管理者就可以快速過濾,替換或輸出需要的字元串
linux正規表達式一般以行為機關處理的。
正規表達式:
1)linux正規表達式(grep awk sed)
2)PHP、JAVA、PERLPYTHON(Perl相容正則 PCRE)
2、為什麼要學正規表達式?
在企業工作中,我們每天做的linux運維工作中,時刻都會面對大量帶有字元串的文本配置、程式、指令輸出及日志檔案等,而我們經常會有迫切的需要,從大量的字元串内容中查找符合工作需要的特定的字元串。這就要靠正規表達式。是以,可以說正規表達式就是為過濾字元的需求而生的!
例如:ifconfig的輸出取IP,例如:cat /var/log/messages輸出等
3、容易混淆的兩個注意事項:
1)正規表達式應用非常廣泛,存在于各種語言中,例如:php、python、java
等。但是我們今天講的linux系統運維工作中的正規表達式,即linux正規表達式,最常用正規表達式的指令就是grep(egrep)、sed、awk,換句話說linux三劍客要想工作的各高效,那一定離不開正規表達式配合的。
2)正規表達式和我們常用的通配符特殊字元是用本質去别的,這一點要注意
通配符例子:
ls *.log這裡的*就是通配符(表示所有),不是正規表達式
基本組成部分:
正規表達式的基本組成部分。
正規表達式
描述
示例
\
轉義符,将特殊字元進行轉義,忽略其特殊意義
a\.b比對a.b,但不能比對ajb,.被轉義為特殊意義
^
比對行首,awk中,^則是比對字元串的開始
^tux比對以tux開頭的行
$
比對行尾,awk中,$則是比對字元串的結尾
tux$比對以tux結尾的行
.
比對除換行符\n之外的任意單個字元,awk則中可以
ab.比對abc或bad,不可比對abcd或abde,隻能比對單字元
[ ]
比對包含在[字元]之中的任意一個字元
coo[kl]可以比對cook或cool
[^ ]
比對[^字元]之外的任意一個字元
123[^45]不可以比對1234或1235,1236、1237都可以
[ - ]
比對[]中指定範圍内的任意一個字元,要寫成遞增
[0-9]可以比對1、2或3等其中任意一個數字
?
比對之前的項1次或者0次
colou?r可以比對color或者colour,不能比對colouur
+
比對之前的項1次或者多次
sa-6+比對sa-6、sa-666,不能比對sa-
*
比對之前的項0次或者多次
co*l比對cl、col、cool、coool等
()
比對表達式,建立一個用于比對的子串
ma(tri)?比對max或maxtrix
{ n }
比對之前的項n次,n是可以為0的正整數
[0-9]{3}比對任意一個三位數,可以擴充為[0-9][0-9][0-9]
{n,}
之前的項至少需要比對n次
[0-9]{2,}比對任意一個兩位數或更多位數
{n,m}
指定之前的項至少比對n次,最多比對m次,n<=m
[0-9]{2,5}比對從兩位數到五位數之間的任意一個數字
|
交替比對|兩邊的任意一項
ab(c|d)比對abc或abd
POSIX字元類
POSIX字元類是一個形如[:...:]的特殊元序列(metasequence),他可以用于比對特定的字元範圍。
[:alnum:]
比對任意一個字母或數字字元
[[:alnum:]]+
[:alpha:]
比對任意一個字母字元(包括大小寫字母)
[[:alpha:]]{4}
[:blank:]
空格與制表符(橫向和縱向)
[[:blank:]]*
[:digit:]
比對任意一個數字字元
[[:digit:]]?
[:lower:]
比對小寫字母
[[:lower:]]{5,}
[:upper:]
比對大寫字母
([[:upper:]]+)?
[:punct:]
比對标點符号
[[:punct:]]
[:space:]
比對一個包括換行符、回車等在内的所有空白符
[[:space:]]+
[:graph:]
比對任何一個可以看得見的且可以列印的字元
[[:graph:]]
[:xdigit:]
任何一個十六進制數(即:0-9,a-f,A-F)
[[:xdigit:]]+
[:cntrl:]
任何一個控制字元(ASCII字元集中的前32個字元)
[[:cntrl:]]
[:print:]
任何一個可以列印的字元
[[:print:]]
元字元
元字元(meta character)是一種Perl風格的正規表達式,隻有一部分文本處理工具支援它,并不是所有的文本處理工具都支援。
\b
單詞邊界
\bcool\b 比對cool,不比對coolant
\B
非單詞邊界
cool\B 比對coolant,不比對cool
\d
單個數字字元
b\db 比對b2b,不比對bcb
\D
單個非數字字元
b\Db 比對bcb,不比對b2b
\w
單個單詞字元(字母、數字與_)
\w 比對1或a,不比對&
\W
單個非單詞字元
\W 比對&,不比對1或a
\n
換行符
\n 比對一個新行
\s
單個空白字元
x\sx 比對x x,不比對xx
\S
單個非空白字元
x\S\x 比對xkx,不比對xx
\r
回車
\r 比對回車
\t
橫向制表符
\t 比對一個橫向制表符
\v
垂直制表符
\v 比對一個垂直制表符
本文轉自 炫維 51CTO部落格,原文連結:http://blog.51cto.com/xuanwei/1844305