成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

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

正則表達式


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

Shell中正則表達式怎么用

Shell中正則表達式怎么用

Shell中正則表達式怎么用

     POSIX 標準中 BRE 和 ERE 支持的 meta 字符有相同也有差異;而 Linux 使用的 GNU 版本的 grep 則功能更強,并且可以通過 -G、-E、-F 選項使用 egrep 和 fgrep 功能。

Shell中正則表達式怎么用

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

Shell中正則表達式怎么用

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

Shell中正則表達式怎么用

Shell中正則表達式怎么用

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

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

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

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

廣告

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

網(wǎng)站建設網(wǎng)站維護公司
合作市| 宁国市| 岳阳市| 阜南县| 双柏县| 大关县| 乐陵市| 无棣县| 大港区| 扶风县| 新安县| 安泽县| 东兴市| 广宗县| 平原县| 北海市| 东乡族自治县| 和田县| 兴化市| 古蔺县| 罗平县| 临夏县| 二连浩特市| 昌都县| 台湾省| 嘉荫县| 凤阳县| 房产| 万全县| 温宿县| 同德县| 安岳县| 治县。| 诏安县| 富川| 昌平区| 玛曲县| 资溪县| 密山市| 都江堰市| 鹿邑县|