grep是個什么鬼

正則表達式

  一個正則表達式是一個描述了一個字符串集合的模式。正則表達式的構造類似于算術表達式,使用各種各樣的操作符來將更小的表達式連在一起。

Grep能理解兩種不同版本的正則表達式語法:“basic”和“extended”。在GNU grep中,兩種語法可以實現的功能是沒有區別的。在其他實現中,基本(basic)正則表達式表達能力要弱一點。下面的描述適用于擴展的(extended)正則表達式,它與基本正則表達式的區別會在最后做一個總結。

基本的構造塊是匹配單個字符的正則表達式。大部分字符,包括所有字母和數字,是匹配它們自身的正則表達式。任何具有特殊含義的元字符可以通過前置一個反斜杠來引用。

1元字符

方括號表達式(bracket)是一個字符序列,放在 [ ] 當中。它匹配序列中的任何一個字符;如果序列中的第一個字符是脫字符(caret) ^ 那么它匹配不在序列中的任何一個字符。例如,正則表達式 [0123456789] 匹配任何一個數字。

在方括號表達式之中,一個范圍表達式(range)由兩個字符組成,中間用一個連字符    (hyphen)分隔。它匹配在這兩個字符之間的任何一個字符,使用本地化的序列順序和字符集。(that sorts between the two characters,inclusive, using the locale’s  collating sequence and character set.)  例如,在默認的  C locale中,[a-d][abcd]等價。

許多 locale 將字符以字典順序排序,在這些 locale 中,[a-d]不與[abcd]等價;例如它可能與[aBbCcDd]等價。

  最后,在方括號表達式中有一些預定義 的字符類,如下所示。它們的名字是自說明的,它們是[:alnum:](字母和數字), [:alpha:](字母), [:cntrl:](控制字符), [:digit:](數字), [:graph:](圖形字符), [:lower:](小寫字母),[:print:](可打印字符),[:punct:](標點符號),[:space:](空格),[:upper:](大寫字母),[:xdigit:](十六進制數字)。

[:alnum:]

字母和數字

[:cntrl:]

控制字符

[:alpha:]

字母

[:print:]

可打印字符

[:lower:]

小寫字母

[:punct:]

標點符號

[:upper:]

大寫字母

[:space:]

空格

[:digit:]

數字

[:graph:]

圖形字符

[:xdigit:]

十六進制數字

例如, [[:alnum:]] 意思是[0-9A-Za-z],但是后一種表示方法依賴于  locale CASCII字符編碼,而前一種是與locale和字符集無關的。(注意這些字符類名中的方括號也是符號名稱的一部分,必須包含在用來為序列定界的方括號之中。)

  大多數元字符處于序列中時會失去它們的特殊意義。為了包含一個字面意義(literal)的 ,需要將它放在序列的最前。與此相似,為了包含一個字面意義(literal)^,需要將它放在除了序列最前之外的其他位置。最后,為了包含一個字面意義(literal), 需要將它放在序列最后。

   句點符(period)  .  匹配任何一個字符。符號\w[[:alnum:]]的同義詞,\W[^[:alnum]]的同義詞。

   脫字符(caret)^和美元標記(dollar)$分別是匹配一行的首部和尾部的空字串的元字符。

   符號\<\>分別是匹配一個詞的首部和尾部的空字串的元字符。

   符號\b匹配一個詞邊緣(edge)的空字串,符號\B匹配不處于一個詞的邊緣的空字串。

2重復操作符

  一個正則表達式后面可以跟隨多種重復操作符之一。

   ? 前的項是可選的,最多匹配一次。

   * 前的項可以匹配零次或多次。

   + 前的項可以匹配一次或多次。

   {n} 前的項將匹配恰好n次。

   {n,} 前的項可以匹配n或更多次。

   {n,m} 前的項將匹配至少n詞,但是不會超過m次。

  兩個正則表達式可以連接到一起;得出的正則表達式可以匹配任何由兩個分別匹配連接前的子表達式的子字符串連接而成的字符串。兩個正則表達式可以用中綴操作符|將它們聯合到一起,得出的正則表達式可以匹配任何匹配聯合前的任何一個子表達式的字符串。

 重復操作符的優先級比連接高,接下來又比選擇的優先級高。一個完整的子表達式可以用圓括號(parentheses)括住來超越這些優先級規則。反向引用 \n 中, n 是一個數字,匹配正則表達式中,以第 n 個圓括號括住的子表達式已匹配的子字符串。

在基本正則表達式中,元字符  ?,  +,  {, |, (, ) 喪失了它們的特殊意義;作為替代,使用加反斜杠的 (back]2slash) 版本 \?, \+, \{, \|, \(, \) 。

  傳統的 egrep 不支持元字符 { ,并且一些 egrep 的實現通過支持  \{  來代替它,因此可移植的腳本應當避免在egrep 中使用 { 模式,應當使用 [{] 來匹配一個字面意義 (literal) { (上面提到大部分元字符放入方括號中會失去特殊意義)

  

原創文章,作者:TQT,如若轉載,請注明出處:http://www.www58058.com/73566

(0)
TQTTQT
上一篇 2017-04-17 19:44
下一篇 2017-04-17 20:20

相關推薦

  • LNMP編譯安裝-week16

    1、源碼編譯安裝LNMP架構環境; 系統: CentOS 7.2IP: 172.16.0.11版本: nginx-1.10.3 php-5.6.30 mysql-5.6.30 一.安裝開發包組 ~]# yum -y groupinstall “Development Tools” “Server Platform Development” 二.編譯安裝ngi…

    2017-05-11
  • Linux腳本基礎練習

    馬哥教育網絡班+ 第7周課堂練習 Linux腳本基礎練習 練習: 1、創建一個10G分區,并格式為ext4文件系統; (1)要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl (2)掛載至/data/mydata目錄 要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳 第一步,在虛擬機中掛載一塊20G的新硬盤 &…

    Linux干貨 2016-11-09
  • 馬哥教育網絡班N22期+第4周課程練習

    馬哥教育網絡班N22期+第4周課程練習 1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp -rf /etc/skel /home/tuser1  chmod -R go= tuser1/ 2. 編…

    Linux干貨 2016-09-19
  • 關于大型網站技術演進的思考(五):存儲的瓶頸(5)

    原文出處: 夏天的森林    上文里我遺留了兩個問題,一個問題是數據庫做了水平拆分以后,如果我們對主鍵的設計采取一種均勻分布的策略,那么它對于被水平拆分出的表后續的查詢操作將有何種影響,第二個問題就是水平拆分的擴容問題。這兩個問題在深入下去,本系列就越來越技術化了,可能最終很多朋友讀完后還是沒有找到解決實際問題的啟迪,而且我覺得…

    Linux干貨 2015-03-11
  • N22-第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; 創建一個10G的分區:  &nbs…

    Linux干貨 2016-12-18
  • 馬哥教育網絡班20期+第二周課程練習

    Table of Contents 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 目錄管理 文件管理 2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。 腳本返回值 命令或路徑補全和展開 3、請使用命令行展開功能來完成以下練習: (1)、創建/tmp目錄下的:a_c, a_d, b_c, b (2…

    Linux干貨 2016-06-23

評論列表(1條)

  • renjin
    renjin 2017-04-21 11:09

    主要介紹了grep命令中的正則表達式的用法 ,內容介紹的很詳細,可以適當的加幾個示例進來

欧美性久久久久