grep系及正則表達(dá)式的應(yīng)用

上周講了一個非常重要的內(nèi)容,老師反復(fù)叮囑一定要先寫關(guān)于這個的博客,那么我們就先講一下文本編輯工具里面的grep系及正則表達(dá)式元字符的使用,首先先講一下什么是grep系

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),榆社網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:榆社等地區(qū)。榆社做網(wǎng)站價格咨詢:028-86922220

grep系:grep、egrep、fgrep

其中最主要的還是grep

grep:Global search Regular Expression and Print out the line

      利用正則表達(dá)式進(jìn)行全局查找并將匹配的行顯示出來;

 如果想要理解這句話我覺得最好我們先看一下什么是正則表達(dá)式的元字符,我們用PATTERN來表示

 字符匹配類:

    .:表示匹配任意單個字符     

    例:.abcd就是指的是以任意字符開頭后面是abcd的所有結(jié)果比如1abcd等

    []:匹配指定范圍內(nèi)的任意單個字符

    例:配合字符集使用,比如[:lower:]表示的就是匹配小寫字母中的任意一個字母

    [^]:匹配指定范圍以外的任意單個字符

    這個應(yīng)該不用舉例,和上一個相反就對了

    下列所有的字符集都可以放在中括號里面用于匹配單個字符

    [:lower:]:

    [:upper:]:

    [:alpha:]:

    [:digit:]:

    [:space:]:

    [:alnum:]:

    [:punct:]:

    [:blank:]:

    [:xdigit:]:所有的十六進(jìn)制數(shù)字;

    a-z:所有的小寫字符

    A-Z:所有的大寫字母

    0-9:標(biāo)識所有的十進(jìn)制字符

注意:這里的a-z指的就是所有的小寫字母,不再是之前所說的a,A,b,...,z

次數(shù)匹配:該類字符之前的那個字符可以出現(xiàn)的次數(shù)

*:其前面的字符可以出現(xiàn)任意次(0次、一次、多次)

例:a*bc就表示,bc前面可以出現(xiàn)任意次a,可以是0次,可以是1次,也可以是多次

\?:其前面的字符可有可無(0次或1次)

例:a\?bc就表示,bc前面只可以出現(xiàn)0次或1次a,注意:在?前加轉(zhuǎn)義字符\是為了防止shell把?當(dāng)作bash變量來處理,后面的\也是如此

\+:其前面的字符至少出現(xiàn)一次(1次或多次)

例:a\+bc就表示,bc前面至少出現(xiàn)一次a,也可以是多次

\{m\}:其前面的字符必須出現(xiàn)m次

例:a\{m\}bc表示,bc前面必須出現(xiàn)m次a

\{m,n\}:其前面的字符至少出現(xiàn)m次,至多出現(xiàn)n次

例:a\{m,n\}bc表示bc前面最少出現(xiàn)m次a,最多出現(xiàn)n次a

\{,n\}:其前面的字符至多出現(xiàn)n次

例:a\{,n\}bc表示bc前面最多可以出現(xiàn)n次a

\{m,\}:其前面的字符至少出現(xiàn)m次,×××

例:a\{m,\}bc表示bc前面至少出現(xiàn)m次a

在正則表達(dá)式中,表示任意長度任意字符的方式:.*

例:.*abc就表示只要是以abc結(jié)尾,前面可以是任意長度任意字符的東西

位置錨定字符:

  行錨定:

    行首錨定:^

    行尾錨定:$

  字錨定:

    字首錨定:\<或\b

    字尾錨定:\>或\b

    \b:舊版本中的錨定方法,建議不使用

關(guān)于行首錨定和字錨定我們在后面的例題中再詳細(xì)解釋    

    在正則表達(dá)式中,字是由非特殊字符組成的連續(xù)字符串。  

  分組與引用字符:

  \(PATTERN\):將PATTERN匹配到的所有字符當(dāng)作一個不可分割的整體來處理

  分組很好理解,就是把由一串字符組成的東西當(dāng)作一個整體在計(jì)算機(jī)中尋找匹配

  在正則表達(dá)式引擎當(dāng)中,有一系列的內(nèi)置變量,這些變量會保存所有分組內(nèi)的字符信息,用于后向引用,這些變量依次是\1,\2,\3...

  PATTERN1\(PATTERN2\)PATTERN3\(PATTERN4\(PATERN5\))

  \1:PATTERN2

  \2:PATTERN4

  \3:PATTERN5

\1:第一組小括號中PATTERN匹配到的字符

\2:第二組小括號中PATTERN匹配到的字符

\3:第三組小括號中PATTERN匹配到的字符

關(guān)于引用,最簡單的解釋就是你之前已經(jīng)使用過的字符串在后面的表達(dá)式中如果再用到的話,你可以不打出來,而只用一個符號來代替,第一個出現(xiàn)的就用\1表示,第二個字符就用\2表示,依次類推

例:請找出在/etc/passwd 中用戶的UID和GID相同的用戶賬戶;

首先我們來分析一下,用戶的UID和GID都是一串?dāng)?shù)字,所有我們想到可以用數(shù)字字符集來匹配,然后再來分析用戶的UID和GID一般都是由幾個數(shù)字組成,所以我們可以用\+來實(shí)現(xiàn),然后要求GID和UID一樣我們只需表示出GID,直接飲用表示UID就可以了,所以具體的命令格式應(yīng)該是下面這種格式。

grep '\(\<[[:digit:]]\+\>\).*\1' /etc/passwd

或:

\|

注意:或字符將其兩邊的字符串當(dāng)作整體對待;

A\|american:A或american

怎么理解把兩邊的字符串當(dāng)作整體來對待,就是比如上面這個例子A\|american表示A或american而不是A或a,然后接上merican

我們再來看一個例子:

請找出ifconfig執(zhí)行結(jié)果中數(shù)值在100-255之間的整數(shù);

第一位:1 2

第二位:0-9 0-4 5

第三位:0-9 0-9 0-5

這個問題難點(diǎn)不在PATTENR的表示,在于分析這個整數(shù)的特點(diǎn),只要分析明白了,這個問題就很好解決

ifconfig | grep '\<\(1[0-9][0-9]\|2[0-4][0-9]\25[0-5]\)\>'

說完正則表達(dá)式的元字符,我們接著來說grep系的具體用法

grep [OPTIONS] PATTERN [FILE...]

PATTERN:過濾條件,是由正則表達(dá)式元字符以及沒有特殊含義的文本字符組成

  正則表達(dá)式的元字符:

     會被正則表達(dá)式的引擎解釋為特殊含義;

     pcre--perl語言的正則表達(dá)式引擎;

     基本的正則表達(dá)式:BRE

     擴(kuò)展的正則表達(dá)式:ERE

grep默認(rèn)僅支持基本正則表達(dá)式;

egrep默認(rèn)支持?jǐn)U展正則表達(dá)式;

fgrep默認(rèn)不開啟正則表達(dá)式引擎;

  文本字符:

     只具備字符表面含義的那些字符;

常用選項(xiàng):

-i --ignore-case 忽略文本字符的大小寫

-v --invert-match 反向匹配,最終顯示的結(jié)果是PATTERN不能成功匹配的行

-c --count 計(jì)數(shù),統(tǒng)計(jì)匹配PATTERN的所有行數(shù)

-o, --only-matching 關(guān)閉貪婪模式,僅顯示PATTERN匹配的內(nèi)容

-q, --quiet, --silent 安靜模式,不輸出任何匹配結(jié)果,用于邏輯判斷

--color[=WHEN], --colour[=WHEN]:將匹配PATTERN的字符以特殊顏色高亮顯示

  --color+auto

-E, --extended-regexp 擴(kuò)展的正則表達(dá)式,grep -E相當(dāng)于egrep

-F, --fixed-strings, --fixed-regexp 基本的正則表達(dá)式,egrep -F 相當(dāng)于fgrep

-G, --basic-regexp:基本的正則表達(dá)式 egrep -G相當(dāng)于grep

-P, --perl-regexp:使用PCRE引擎

-A NUM, --after-context=NUM:在顯示匹配PATTERN的行的同時顯示其后面的NUM行

-B NUM, --before-context=NUM:在顯示匹配PATTERN的行的同時顯示其前面的NUM行

-C NUM, -NUM, --context=NUM:在顯示匹配PATTERN的行的同時顯示其前后的NUM行

關(guān)于grep的用法其實(shí)和命令的學(xué)習(xí)是差不多的,就是先記得滾瓜爛熟再配合操作鞏固就好了,接下來說egrep和fgrep就很好理解了,egrep相對于grep的區(qū)別就是在使用正則表達(dá)式元字符的時候可以不用轉(zhuǎn)義字符

egrep:

egrep [OPTIONS] PATTERN [FILE...]

擴(kuò)展的正則表達(dá)式元字符:

字符匹配:

.

[]

[^]

次數(shù)匹配:

*

?

+

{}

{m,n}

{m,}

{,n}

位置錨定字符

^

$

\<,\b

\>,\b

分組和引用

()

\1,\2,\3

或:

|

fgrep:PATTERN中所有的字符都被當(dāng)作文本字符來處理

關(guān)于fgrep,只是把PATTENR解釋為純文本,不再用正則表達(dá)式對其進(jìn)行解釋,有利用提高搜索的速度

關(guān)于grep系和正則表達(dá)式元字符就介紹到這,這是很重要的文件處理只是,大家必須好好理解,吸收掌握。

當(dāng)前文章:grep系及正則表達(dá)式的應(yīng)用
分享路徑:http://bm7419.com/article4/gejiie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站營銷網(wǎng)站內(nèi)鏈、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司