歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux下正則表達式基礎

Linux下正則表達式基礎

日期:2017/3/3 16:35:20   编辑:關於Linux

1 什麼是正則表達式

正則表達式(REGEXP:REGular EXPression)正則表達式裡面的字符不是做本身的意義,通常是做通配,錨定的等特殊意義;並且比通配符更能精確的描述檢索文本的需要。它是對字符串操作的一種邏輯公式,通俗的說就是對字符及很多字符的組合結合自身法則組合成一個規則的字符串(即過濾條件)通常把這些由字符或者是正則表達式的字符組合起來的過濾文本過濾條件叫做模式(pattern)。

正則表達式主要應用在文本方面,可以方便的處理文本內容,實現我們對查找一些文本內容的需要;正則表達式靈活性、邏輯性和功能性很強,它的都是由一些普通字符(包括大小寫的字母和數字和一些元字符(由特殊字符組成)

2 grep簡介

grep:使用基本正則表達式定義的模式來過濾文本的命令,並將符合模式的文本行顯示出來(做部分匹配,匹配時整行有部分被匹配到時,顯示整行)egrep是grep的擴展,支持擴展正則表達式的元字符

grep常用選項:

-i:不區別大小寫

--color查找出來的顏色顯示

-v:顯示沒有被模式匹配到的行

-o:只顯示被模式匹配到的字符串

—E:使用擴展正則表達式

-A:當某一行被grep命令匹配到以後,不但顯示這一行還可以顯示這一行後面的多少行,後面通常跟數字,顯示匹配到匹配到的這一行的後面那幾行(即數字是代表行數的)

-B:與-A相似後面通常跟數字顯示匹配到的這一行的前面那幾行(即數字是代表行數的)

-C:與-A相似後面通常跟數字顯示匹配到的這一行的前後那幾行(即數字是代表行數的)

3 正則表達式的分類及字符介紹

3.1 正則表達式的分類

正則表達式分為兩類分別是:(1)基本正則表達式----Basic REGEXP (2)擴展正則表達式----Extended REGEXP

3.2 正則表達式的字符

3.2.1 基本與擴展字符共同之處

(1)字符匹配

.:表示匹配任意單個字符 例如:grep “.a.” 表示查找字母a有帶有個字符如同 a1 ab ar a0等

[]:表示匹配指定范圍內的任意單個字符 例如:grep “[:space:]” FILE查找帶有空白符的文本行

[:space:]表示所有的空格字符

[:punct:]標點符號集合

[a-z]或[:lower:]:小寫字母

[A-Z]或[:upper:]:大寫字母

[:slpha:]:大小寫字母

[0-9]或[:digit:]:數字

[:alnum:]:數字和大小寫字母

[^]:表示指定范圍以外的任意單個字符 例如:grep “[^[:space:]]” FILE查找帶有非空白符的文本行

(2)次數匹配:

*:表示匹配其前其前面的字符0次一次或多次 例如:grep “b*” FILE 查找帶有b字母並且後帶有任意個b的文本行

\?::表示匹配其前面字符0或1次 例如:grep “ab\?” FILE 查找帶有ab字母並且b後又跟一個或0個b的文本行

.*:用於基本正則表達式,表示任意長度的任意字符 例如:grep “a.*” FILE字母a後跟任意字符的文本行

(3)位置錨定

^:錨定行首,此字符後面的任意內容必須出現在行首 例如:grep “^h” FILE 查找以小寫字母h開頭的行

$:錨定行尾,此字符前面的任意內容必須出現在行尾 例如:grep “h$” FILE 查找以小寫字母h結尾的文本行

^$:空白行

\<或\b:錨定詞首,其後面的任意字符必須作為單詞首部出現

\>或\b:錨定詞尾,其前面的任意字符必須為單詞的尾部出現

例如:grep “\bhi\b” FILE 查找帶有hi單詞的文本行

3.2.2 基本與擴展字符不同之處

基本正則表達式與擴展正則表達式主要體現在“字符匹配與分組”

(1)字符匹配

\{m,n\}:用於基本正則表達式,表示匹配其前字符至少m次,至多n次;當沒有上限的時候可以省略不寫(即n可省略),但最小值為0時不可省略(即m必須有)

例如: grep “a\{1,5\}” FILE 查找帶有小寫字母a並且其後又緊跟不少於一個不大於5個的小寫字母a的文本行

+:用於擴展正則表達式,匹配其前面字符至少一次 例如:grep –E “a+” FILE 查找小寫字母a後面至少又跟一個a的文本行

(2)分組

\(\)…\(\)..\1:用於基本正則表達式做後向引用

\1:引用第一個左括號以及與之對應的右括號所包括的所有內容

\2:引用第二個左括號以及與之對應的右括號所包括的所有內容

\3:引用第三個左括號以及與之對應的右括號所包括的所有內容

例如:grep “\(root\).*\(100\)\1” 查找root單詞後跟任意字符後帶有100數字並緊跟數字後面又帶有root單詞的文本行 \1引用前面第一個括號的內容;如果是grep “\(root\).*\(100\)\2”

則是查找root單詞後跟任意字符後帶有100數字並緊跟數字後面又帶有100數字的文本行。

():用於擴展正則表達式,做後向引用與基本正則表達式相比不加反斜線

()…()..\1:括號內不加反斜槓,用grep –E 或 egrep 來查找

\1:引用第一個左括號以及與之對應的右括號所包括的所有內容

\2:引用第二個左括號以及與之對應的右括號所包括的所有內容

\3:引用第三個左括號以及與之對應的右括號所包括的所有內容

(3)“|“:代表或者的意思,用於擴展正則表達式中

| : 表示or的意思即或

例如:A|abc :匹配的是A或者abc 匹配的是整個單詞

(C|c)at:匹配大寫C或小寫c開頭的cat

本文出自 “Fly*On*Sky” 博客,請務必保留此出處http://djy0000.blog.51cto.com/5816828/1148452

Copyright © Linux教程網 All Rights Reserved