91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell中正則表達式怎么用

發布時間:2021-12-30 18:01:19 來源:億速云 閱讀:202 作者:小新 欄目:建站服務器

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

正則表達式


    正則表達式:編寫處理字符串的程序或網頁時,用于描述查找符合某些復雜規則的字符串的工具。換句話說,就是文本規則的代碼。
     正則表達式與通配符類似,是一種進行文本匹配的工具,但是它可以更精確的描述匹配需求。常見的支持正則表達式的工具有:匹配文本行的 grep 工具族;改變輸入流的 sed 流編輯器;處理字符串的語言 awk、python、perl、Tcl 等;文件查看程序或分頁程序 more、page、less 等;文本編輯器 ed、vi、emacs、vim 等。
     正則表達式內部有多種方法嵌入注釋,因此它具有自文檔化(self-documenting)的能力。
     \b 是正則表達式的一個特殊代碼(元字符,meta character),代表單詞的開頭或者結尾,也就是單詞的分界處。通常英文的單詞是由 空格、標點符號或者換行來分隔的,但是 \b 并不匹配它們中的任何一個,只匹配一個“位置” - 這個位置的前一個字符和后一個字符不全是(一個是,一個不是或不存在) \w。“.”是另一個元字符,匹配除了換行符以外的任意字符,“*”指定它之前的內容可以連續重復出現任意次。“.*”就表示任意數量的不包含換行的字符。“\d”元字符匹配一位數字(0 或者 1 或者 2 ……),\d{n}表示“\d”必須連續重復匹配 n 次。
     歷史上曾經出現過三種 grep,它們都可以用于匹配文本:Grep 是最早的文本匹配程序,使用 POSIX 支持的基本正則表達式(Basic Regular Expression,BRE);Egrep 是擴展的 grep(Extended grep),使用擴展正則表達式(Extended Regular Expression,ERE);Fgrep 是快速 grep(Fast grep),用于匹配固定字符而不是正則表達式。1992 年發布的 POSIX(The Portable Operating System Interface) 標準中,三個版本合而為一。fgrep 和 egrep 可以在所有 UNIX/Linux 系統上使用,但是被標記為 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:]_]+ 正則表達式,它匹配一個或多個“數字字符或下劃線”,使用 -E 參數來支持 ERE。
     匹配單個字符有四種方式:一般字符、轉義的 meta 字符、點號‘.’meta 字符、方括號表達式。一般字符指未列于表 4-1 中的字符,包括文字和數字字符、空白字符和標點符號字符,一般字符匹配自身,例如正則 china 就匹配單詞 china 而不是 China,如果想要同時匹配需要用方括號表達式。表 4-1 中列出了一些 meta 字符,表示一些特殊情況下的含義,當 meta 字符無法表示自己,而又需要這些字符時,就要用轉義字符,將轉義字符置于一般字符前,轉義字符本身會被忽略。點號字符表示任一字符,很少單獨使用點號符,經常與其他 meta 字符混用來匹配多個字符。方括號表達式(bracket expression)用以匹配不同的情況,例如 [cC]hina 只匹配 china 和 China,[^abc] 匹配除了 abc 意外的任意字符,同時在方括號表達式中,所有其他的 meta 字符都會失去含義,例如 [\.] 匹配反斜杠和點號,而不是匹配句點。
     在基本正則表達式中,最簡單的表示多個字符的方法是將多個字符連接起來。但是這種方法局限很多,而修飾符 meta 的應用提供了靈活的匹配能力。其中星號(*)meta 字符匹配 0 個或多個星號前的單個字符。區間表達式可以匹配指定字符的重復次數,例如 ab\{3\}c 匹配 a 和 c 之間的 b 重復出現三次,ab\{3,\}c 匹配 b 重復出現至少三次,ab\{3,5\}c 匹配 b 重復出現三次到五次。ERE 在匹配多個字符時與 BRE 很相似,但是支持更多的表達式,但 ERE 中的區間表達式不需要轉義字符,它的 \{ 和 \} 僅表示花括號本身。在 ERE 中,? 匹配 0 個或一個前置正則表達式,+ 匹配一個或多個前置正則表達式,例如 ab?c 只匹配 ac 和 abc,ab+c 匹配 abc、abbc、abbbc…… 而不匹配 ac。
     錨點字符(^ 和 $)用于匹配字符串的開頭和結尾,^ 和 $ 一起使用,則兩者之間的正則表達式匹配了整個正則表達式或整行,而 ^$ 匹配空的字符串或空行。BRE 中錨點僅僅在正則表達式的開始和結尾處才是 meta 字符,而在正則表達式中的錨點字符僅僅代表它自身,ERE 中錨點字符永遠是 meta 字符,正則表達式中包含的錨點字符有意義,只是無法匹配上任何字符串,例如 abc^defg 在 BRE 中匹配字符串“abc^def”,而在 ERE 中永遠也匹配不上任何東西。
     

Shell中正則表達式怎么用

Shell中正則表達式怎么用

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

以上是“Shell中正則表達式怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双柏县| 晋州市| 南木林县| 正镶白旗| 衡东县| 景谷| 尤溪县| 建始县| 荥阳市| 铁岭市| 潞城市| 万盛区| 宿迁市| 久治县| 砀山县| 兴海县| 抚州市| 天峻县| 黑河市| 宜章县| 连山| 上栗县| 临高县| 灌阳县| 敦化市| 宝鸡市| 文山县| 太保市| 贵德县| 公安县| 成武县| 宣汉县| 获嘉县| 无为县| 黎城县| 商南县| 兴安县| 定远县| 新平| 留坝县| 闵行区|