大戰GREP與EGREP

 

正則表達式一般被用來檢索,替換那些符合某個模式的內容,一般是使用一類字符所書寫的模式,而這些模式一般是元字符和普通字符的混合體git

咱們一般使用選取條件,只顯示符合條件的工具備GREP, EGREP,FGREP正則表達式

1,GREP 全稱是:Globle searchRegular RE) and Print out the line ,< /span>全面搜索正則表達式並把它打印出來,支持基本的正則表達式bash

2,EGREPExtended GREP, 擴展的GREP,支持擴展的正則表達式ide

3,FGREP,fast GREP,不支持正則表達式工具

三者中 FGREP是最快速的,效率最高,可是不支持模式(pattern)匹配,因此咱們通常不使用,最經常使用的是GREP和EGREPspa

咱們來解釋GREP已經EGREP的內容,可以使你們明白GREP和EGREP的用法ci

咱們來看GREP的語法格式字符串

GREP[option] ‘pattern’FILEit

GREP[選項]‘模式’文件io

咱們首先看pattern(模式),而後再看option

Pattern是由元字符和普通字符組成

經常使用的pattern解釋以下

符號

做用

用法格式

^脫字符

錨定行首

^patten

$

錨定行尾

Pattern$

.

匹配任意字符

*

匹配緊挨再前面的任意字符

[]

匹配指定範圍內的任意字符

[^]

匹配非指定範圍的任意字符

\?

匹配其前面的字符1次或者0

\{m,n\}

匹配前面的字符至少m次,至多n

\<

錨定詞首

\<pattern

\>

錨定詞尾

Patteren\>

\(\)

分組

\(pattern\)

拓展選項

.*

匹配任意長度字符

[a-z] [:lower:]

小寫字母

[A-Z][:upper:]

大寫字母

[0-9][:digit:]

數字

[:alpha:]

字母

[:almum:]

字母或者數字

[:space:]

空格

[:punct:]

\{m,\}+m(加強版的)

最少匹配m次,最多無限次

\{0,m\}

不大於m

\{m\}

精確匹配m

\(pattern\) .*\1

pattern所匹配的字符爲一個組

加強的正則表達式:

+

匹配前面的數字至少N

|

選擇

咱們來看grep的選項

--color 顏色

-v反向選取,

-o只顯示被匹配到的字符串,而不是整個行

-i 不區分大小寫

-A # 顯示匹配的行時,順帶顯示後面的#個行

-B # 顯示匹配的行時,順帶顯示前面的#個行

-C # 顯示匹配的行時,順帶顯示先後的#個行

-E使用加強的正則表達式

咱們來舉例:

eg1 :查看/etc/passwd下一root 開頭,以sh結尾的

# grep "^r.*sh$" /etc/passwd

root:x:0:0:root:/root:/bin/bash

咱們來查看/etc/passwd下的內容,咱們使用#/etc/passwd來查看,咱們看部分截圖

 

解釋:尋找以r開頭,因此使用脫字符^, ^r表示, . 表示任意字符,*表示匹配所在其前的任意字符,

因此.* 就表示匹配任意字符若干次,$ 表示錨定行尾,因此sh$就表示以sh結尾的行

綜合上面描述# grep"^r.*sh$" /etc/passwd 就表示匹配以r開頭,sh結尾的行

eg2:顯示./etc/http.d/conf/httpd.conf中非空白字符行

# grep –v 「^$」/etc/http.d/conf/httpd.conf 

咱們看到 ^$表示空白行,^表示行首,$表示行尾,因此^$ 表示整個行

 

eg3,顯示ifconfig中匹配1-255之間的數字

ifconfig | grep--color=auto -E"\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

解釋:管道命令ifconfig 的輸出,送給了grep, 

--color=auto 表示匹配到的顏色是默認紅色

-E表示使用加強型的正則表達式

\< \>分別表示詞的開頭和結尾

表示或者,多選一

[1-9] 表示一位數字

[1-9][0-9]表示兩位數字

1[0-9][0-9]表示以1開頭的兩位數字

2[0-4][0-9]表示已2開頭0-4爲十位數,0-9爲個位數的數字

25[0-5]25開頭,0-5爲個位數字的數字

eg4. 顯示/etc/rc.d/rc.sysinit中符合形爲「任意單個字符n任意字符任意單個字符n」模式的行;即任意單個字符後面跟了個n,n後面有任意長度的任意字符,然後是任意單個字符後面跟了個n,但後面的n以前的字符要與前面的n以前的字符相同;

答案:\(.n\).*\1

解釋:此處咱們使用了分組的概念分組的模式\(pattern\),套用模式 \(.n\) 表示以任意字符後加一個n是個分組,後面的.* 表示任意長度任意字符\1 表示與前面的分組同樣

eg5.顯示/etc/httpd/conf/httpd.conf中以一個或者多個空白字符開頭的行

grep 「^[[:space:]]\{1,\} 「/etc/httpd/conf/httpd.conf

grep -E 「^[[:space:]]+」/etc/httpd/conf/httpd.conf

解釋:

\{1,\} 表示匹配前面的pattern至少1次,[:space:]是空白字符,[ ]表示匹配指定範圍內的任意字符;表示匹配行首

在加強版的正則表達式也表示至少一次匹

咱們就寫到這裏,但願你們多多交流

相關文章
相關標籤/搜索