天天看點

Linux正規表達式文法

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