linux之正則表達式

文件查找的需要:

grep:(GLOBAL Research) 根據模式(網)去搜索文本,而後將符合模式的文本行顯示出來。

【部分匹配,顯示時顯示一行】

Pattern:模式。(文本字符以及正則表達式元字符組合而成的匹配條件)

例子:grep  root /etc/passwd


grep所支持的選項:

-i:忽略大小寫

--color 顯示顏色

alias grep=grep --color

-v: 反向查找,顯示沒有被模式匹配的行

-o:只顯示被模式匹配出來的字符串,每個字符串顯示爲一行。


回顧一下 globbing(文件名通配)

* :任意長度任意字符

?:任意單個字符

[]:指定範圍內的

[^]:指定範圍之外的


如何寫模式pattern

正則表達式 Regular EXPressionREGEXP

元字符:

. :用點表示任意單個字符

grep r..t /etc/passwd

[] :匹配指定範圍內的任意單個字符

[^]:匹配執行範圍之外的任意單個字符

字符集合:[:digit:]  [:space::]  [::upper::]  [:lower:]  [:alpha:]  [:alnum:]


匹配次數:

* :匹配其前面的字符任意次

a,b,ab,aab,acb,adb,amnbamnbamnbamnb

a*b : a出現任意次,後面跟個b

a.*b: a開頭,b結束,中間跟啥都行

.* :這才表示任意長度任意字符

(正則表達式是貪婪模式,儘可能長的匹配。)

\?:表示匹配它前面的字符0次或1次。

a\?b :a出現0次或1次,後面跟個b

\{m,n\} :匹配其前的字符,至少m次,至多n次。

\{1,\}

\{1,3\}

grep a\{1,3\}b  test.txt

grep a.\{1,3\}b  test.txt

位置錨定:

^ :此字符後面的字符,必須出現在行首。

$ :錨定行尾,此字符前面的任意內容必須出現在行尾。

^$ : 這個表示空白行。

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

\>b: 錨定詞尾,其後面的任意字符必須作爲單詞的尾部出現。

grep root\> test.txt

grep \<root test.txt

grep \<root\> test.txt

grep \broot\b test.txt

分組:

\(\)

\(ab\)* :ab可以出現任意次。

實現分組的目的,是後面再次引用它。

\1:調用前面第一個小括號內容

\2

\3

例子:

He love his lover

She like her liker

He like his lover

要求前後一樣,匹配

l..e

grep  \(l..e\).*\1  test.txt

grep \([[:digit:]]\).*\1$ test.txt



grep -E 擴展正則表達式

-A 顯示匹配行的下面的行顯示

-B 顯示匹配行的上面的行顯示

-C 顯示匹配行的上下的行顯示

grep --color -B 2 ^core id /proc/cpuinfo


擴展正則表達式


字符匹配

.

[]

[^]

次數匹配

*

?:這裏不用加反斜線

+ : (這個基本正則表達式沒有的)匹配其前面的字符至少一次。

+? 《===*

(m,n): 擴展正則表達式不用使用轉義字符


位置錨定:

^

$

\>

\<


分組:

( ) 分組

\1,\2,\3


還支持 或者

| or

C|cat  :表示C 或者cat,表示整個左邊,整個右邊。

grep  --color (C|c)at  test.txt


grep --color -E ^[[:space:]]+ /boot/grub/grub.conf


grep -E  =====> egrep

例子:

匹配0-255的數字。

egrep --color  \<([1-9] | [1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>  test.txt

例子:找IP地址

匹配(.)本身

\.

egrep (\<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([1-9] | [1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>test.txt


IP 地址

A1-127

B128-191

C192-223

D

E

匹配IP地址

分析:\<[1-9] | [1-9][0-9] | 1[0-9]{2} | 2[01][0-9] | 22[0-3]\>(\.\<[1-9] | [1-9][0-9] | 1[0-9]{2} | 2[01][0-9] | 22[0-4]\>){2}\.\<[1-9] | [1-9][0-9] | 1[0-9]{2} | 2[01][0-9] | 22[0-4]\>


本文出自“技術成就夢想”博客,轉載請註明http://bullman.blog.51cto.com/1020988/1405969

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章