Shell中正則表達(dá)式怎么用-創(chuàng)新互聯(lián)

這篇文章主要介紹Shell中正則表達(dá)式怎么用,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

目前創(chuàng)新互聯(lián)已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、聊城網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

正則表達(dá)式


    正則表達(dá)式:編寫(xiě)處理字符串的程序或網(wǎng)頁(yè)時(shí),用于描述查找符合某些復(fù)雜規(guī)則的字符串的工具。換句話說(shuō),就是文本規(guī)則的代碼。
     正則表達(dá)式與通配符類似,是一種進(jìn)行文本匹配的工具,但是它可以更精確的描述匹配需求。常見(jiàn)的支持正則表達(dá)式的工具有:匹配文本行的 grep 工具族;改變輸入流的 sed 流編輯器;處理字符串的語(yǔ)言 awk、python、perl、Tcl 等;文件查看程序或分頁(yè)程序 more、page、less 等;文本編輯器 ed、vi、emacs、vim 等。
     正則表達(dá)式內(nèi)部有多種方法嵌入注釋,因此它具有自文檔化(self-documenting)的能力。
     \b 是正則表達(dá)式的一個(gè)特殊代碼(元字符,meta character),代表單詞的開(kāi)頭或者結(jié)尾,也就是單詞的分界處。通常英文的單詞是由 空格、標(biāo)點(diǎn)符號(hào)或者換行來(lái)分隔的,但是 \b 并不匹配它們中的任何一個(gè),只匹配一個(gè)“位置” - 這個(gè)位置的前一個(gè)字符和后一個(gè)字符不全是(一個(gè)是,一個(gè)不是或不存在) \w?!?”是另一個(gè)元字符,匹配除了換行符以外的任意字符,“*”指定它之前的內(nèi)容可以連續(xù)重復(fù)出現(xiàn)任意次?!?*”就表示任意數(shù)量的不包含換行的字符?!癨d”元字符匹配一位數(shù)字(0 或者 1 或者 2 ……),\d{n}表示“\d”必須連續(xù)重復(fù)匹配 n 次。
     歷史上曾經(jīng)出現(xiàn)過(guò)三種 grep,它們都可以用于匹配文本:Grep 是最早的文本匹配程序,使用 POSIX 支持的基本正則表達(dá)式(Basic Regular Expression,BRE);Egrep 是擴(kuò)展的 grep(Extended grep),使用擴(kuò)展正則表達(dá)式(Extended Regular Expression,ERE);Fgrep 是快速 grep(Fast grep),用于匹配固定字符而不是正則表達(dá)式。1992 年發(fā)布的 POSIX(The Portable Operating System Interface) 標(biāo)準(zhǔn)中,三個(gè)版本合而為一。fgrep 和 egrep 可以在所有 UNIX/Linux 系統(tǒng)上使用,但是被標(biāo)記為 deprecated(不推薦)。
     從最基本的角度將,正則中有元字符(特殊字符)和一般字符匹配這兩種基本字符匹配。一般字符指沒(méi)有任何特殊意義的字符,而元字符則被賦予了某些特殊含義。

Shell中正則表達(dá)式怎么用

Shell中正則表達(dá)式怎么用

Shell中正則表達(dá)式怎么用

     POSIX 標(biāo)準(zhǔn)中 BRE 和 ERE 支持的 meta 字符有相同也有差異;而 Linux 使用的 GNU 版本的 grep 則功能更強(qiáng),并且可以通過(guò) -G、-E、-F 選項(xiàng)使用 egrep 和 fgrep 功能。

Shell中正則表達(dá)式怎么用

     在 Linux 下的 grep,除了 fgrep 之外,都支持 POSIX 的特殊字符類。其中字符集(POSIX Character class)是以 ‘[:’和‘:]’括起來(lái)的字符,而且需要放到 [] 內(nèi)才能成為正則表達(dá)式,例如 [A-Za-z0-9] 與 [[:alnum:]] 等價(jià);排序符號(hào)(Collating symbol)是以‘[.’和‘.]’括起來(lái)的字符,將多個(gè)字符序列視為一個(gè)元素,例如 [.cn.] 表示 cn 字符序列;等價(jià)字符集(Equivalence class)表示應(yīng)視為等值的一族字符,使用‘[=’和‘=]’將字符括起來(lái)。正則表達(dá)式允許將 POSIX 字符集與其他字符集混用,例如 [[:alpha:]!] 匹配任意一個(gè)英文字母或者感嘆號(hào)。

Shell中正則表達(dá)式怎么用

     上圖中,使用了 [[:digit:]_]+ 正則表達(dá)式,它匹配一個(gè)或多個(gè)“數(shù)字字符或下劃線”,使用 -E 參數(shù)來(lái)支持 ERE。
     匹配單個(gè)字符有四種方式:一般字符、轉(zhuǎn)義的 meta 字符、點(diǎn)號(hào)‘.’meta 字符、方括號(hào)表達(dá)式。一般字符指未列于表 4-1 中的字符,包括文字和數(shù)字字符、空白字符和標(biāo)點(diǎn)符號(hào)字符,一般字符匹配自身,例如正則 china 就匹配單詞 china 而不是 China,如果想要同時(shí)匹配需要用方括號(hào)表達(dá)式。表 4-1 中列出了一些 meta 字符,表示一些特殊情況下的含義,當(dāng) meta 字符無(wú)法表示自己,而又需要這些字符時(shí),就要用轉(zhuǎn)義字符,將轉(zhuǎn)義字符置于一般字符前,轉(zhuǎn)義字符本身會(huì)被忽略。點(diǎn)號(hào)字符表示任一字符,很少單獨(dú)使用點(diǎn)號(hào)符,經(jīng)常與其他 meta 字符混用來(lái)匹配多個(gè)字符。方括號(hào)表達(dá)式(bracket expression)用以匹配不同的情況,例如 [cC]hina 只匹配 china 和 China,[^abc] 匹配除了 abc 意外的任意字符,同時(shí)在方括號(hào)表達(dá)式中,所有其他的 meta 字符都會(huì)失去含義,例如 [\.] 匹配反斜杠和點(diǎn)號(hào),而不是匹配句點(diǎn)。
     在基本正則表達(dá)式中,最簡(jiǎn)單的表示多個(gè)字符的方法是將多個(gè)字符連接起來(lái)。但是這種方法局限很多,而修飾符 meta 的應(yīng)用提供了靈活的匹配能力。其中星號(hào)(*)meta 字符匹配 0 個(gè)或多個(gè)星號(hào)前的單個(gè)字符。區(qū)間表達(dá)式可以匹配指定字符的重復(fù)次數(shù),例如 ab\{3\}c 匹配 a 和 c 之間的 b 重復(fù)出現(xiàn)三次,ab\{3,\}c 匹配 b 重復(fù)出現(xiàn)至少三次,ab\{3,5\}c 匹配 b 重復(fù)出現(xiàn)三次到五次。ERE 在匹配多個(gè)字符時(shí)與 BRE 很相似,但是支持更多的表達(dá)式,但 ERE 中的區(qū)間表達(dá)式不需要轉(zhuǎn)義字符,它的 \{ 和 \} 僅表示花括號(hào)本身。在 ERE 中,? 匹配 0 個(gè)或一個(gè)前置正則表達(dá)式,+ 匹配一個(gè)或多個(gè)前置正則表達(dá)式,例如 ab?c 只匹配 ac 和 abc,ab+c 匹配 abc、abbc、abbbc…… 而不匹配 ac。
     錨點(diǎn)字符(^ 和 $)用于匹配字符串的開(kāi)頭和結(jié)尾,^ 和 $ 一起使用,則兩者之間的正則表達(dá)式匹配了整個(gè)正則表達(dá)式或整行,而 ^$ 匹配空的字符串或空行。BRE 中錨點(diǎn)僅僅在正則表達(dá)式的開(kāi)始和結(jié)尾處才是 meta 字符,而在正則表達(dá)式中的錨點(diǎn)字符僅僅代表它自身,ERE 中錨點(diǎn)字符永遠(yuǎn)是 meta 字符,正則表達(dá)式中包含的錨點(diǎn)字符有意義,只是無(wú)法匹配上任何字符串,例如 abc^defg 在 BRE 中匹配字符串“abc^def”,而在 ERE 中永遠(yuǎn)也匹配不上任何東西。
     

Shell中正則表達(dá)式怎么用

Shell中正則表達(dá)式怎么用

     運(yùn)算符優(yōu)先級(jí)指在不同的 meta 字符同時(shí)出現(xiàn)時(shí),高優(yōu)先級(jí)的 meta 字符將比低優(yōu)先級(jí)的先處理。
     BRE 中提供了一種機(jī)制名為“后向引用”(backreference),用于匹配之前正則表達(dá)式選定的部分。\1 - \9 引用之前選定的模式,‘\(’和‘\)’括起想要之后引用的部分。例如 \(ab\)\(cd\)[efg]*\1\2 匹配 abcdabcd、abcdeabcd、abcdfabcd、abcdgabcd,\(go\).*\1 匹配一行中前后出現(xiàn)兩個(gè) go。
     交替是 ERE 才有的特性,當(dāng)使用方括號(hào)表達(dá)式時(shí),交替表示可以“匹配這個(gè)字符,或者那個(gè)字符”,但是無(wú)法“匹配這個(gè)字符序列或那個(gè)字符序列”。交替是在不同序列之間用管道符號(hào)隔開(kāi),例如 you|me 匹配 you 或 me。交替字符可以和管道符號(hào)意義在一個(gè)正則表達(dá)式中使用多個(gè)來(lái)提供多種選擇。因?yàn)樗膬?yōu)先級(jí)最低,所以會(huì)一直擴(kuò)展到新的交替字符,或正則表達(dá)式結(jié)束為止。
     在 BRE 中,使用一些 meta 字符修飾前置字符匹配重復(fù)的情況,但是僅僅只針對(duì)單個(gè)字符。在 ERE 中分組功能使 meta 字符修飾前置字符串,通過(guò)‘()’將式子括起來(lái),例如(go)+ 匹配一個(gè)或多個(gè)連續(xù)的 go。在使用交替時(shí),分組非常有用,例如(Lily|Lucy)限定了匹配 Lily 或 Lucy。

以上是“Shell中正則表達(dá)式怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

本文名稱:Shell中正則表達(dá)式怎么用-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://muchs.cn/article8/ddsiop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、建站公司、云服務(wù)器、品牌網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、小程序開(kāi)發(fā)

廣告

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

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司