【linux】正則表達式之grep、egrep、元字符

正則表達式:

    又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。是一類字符所書寫的模式,其中許多字符(元字符)不表示其字面意義,而是表達控制或通配等功能。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。

語法:

    grep [OPTIONS] PATTERN [FILE…]

    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

    如:/etc/passwd中以root開頭的行,及其后面的兩行

   blob.png

    -A 2為OPTIONS,命令選項;^root為PATTERN,其中root為字面意思,^為元字符;/etc/passwd為FILE

正則表達式分類:

    根據元字符數量及功能的不同分為基本正則表達式(grep)、擴展正則表達式(egrep)。grep和egrep都是文本搜索工具,可根據用戶指定的文本模式(搜索條件,即:文本+元字符)對目標文件進行逐行搜索,顯示能匹配到的行;用法上grep -E等同于egrep。此外還有一個文本搜索工具fgrep,不支持正則表達式,沒有自己的元字符,不做詳細解釋。

    在搜索工具中,元字符起到至關重要的作用;元字符即,不表示其字面意義,而用于額外功能性描述。

正則表達式元字符:

    grep元字符:

        1.字符匹配:

        .: 匹配任意單個字符

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

        [0-9], [[:digit:]]

        [a-z], [[:lower:]]

        [A-Z], [[:upper:]]

        [[:space:]]匹配空白字符,包括空格,tab…

            Space characters (such as space, tab, and formfeed, to  name a few).

            tab, newline, vertical tab, form feed, carriage return, and space. 

        [[:punct:]]匹配任意標點符號:: '! " # $ % & ' ( ) * + , – . / : ; < = > ? @ [ \ ] ^ _ ' { | } ~'. 

            Punctuation characters (characters that are not letter, digits, control characters, or space characters).

        [[:alpha:]]字母數字符

        Alphabetic characters.

        [[:alnum:]]匹配任何字母 

        Alphanumeric characters.

        [^]:代表本表達式不匹配"[]"內出現的字符

        2.次數匹配元字符:

    用于實現指定其前面的字符所能夠出現的次數

    *: 任意長度,它前面的字符可以出現任意次

    \?: 0次或1次,它前面的字符是可有可無的

    \{m\}: m次,它前的字符要出現m次

    \{m,n\}: 至少m次,至多n次

    \{m,\}:至少m次

    \{0,n\}: 至多n次

    .*:任意長度的任意字符

        3.位置錨定:

    ^: 行首錨定;寫在模式最左側

    $: 行尾錨定:寫在模式最右側

    ^$: 空白行

        4.分組:

    \(\)

    例如:\(ab\)*

    分組中的模式匹配到的內容,可由正則表達式引擎記憶在內存中,之后可被引用

        5.引用:

    例如\(ab\(x\)y\).*\(mn\)

    有編號:自左而后的左括號,以及與其匹配右括號

    \(a\(b\(c\)\)mn\(x\)\).*\1

    \#: 引用第n個括號所匹配到的內容,而非模式本身

    例如:      blob.png

    引用第一個分組的內容為\(w\(es\)t\)

    引用第二個分組的內容為\(es\)

    也可以看出正則表達式是工作在貪婪模式下,會盡可能多的匹配

        6.補充:

    不包含特殊字符的連續字符組成的串叫單詞:

    \<: 詞首,出現于單詞左側,\b

    如:\<char

    \>: 詞尾,出現于單詞右側, \b

    如:char\>

    egrep元字符:

        1.字符匹配:

    .:任意單個字符

    []:匹配范圍內的任意單個字符

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

        2.次數匹配:

    *:任意次

    ?: 0次或1次

    +: 至少1次;

    {m}: 精確匹配m次

    {m,n}: 至少m次,至多n次

    {m,}:至少m次

    {0,n}:至多n次

        3.錨定:

    ^:行首

    $:行尾

    ^$, ^[[:space:]]*$:空白行

        4.分組:

    ()

        5.引用:

    \1, \2, \3

        6.或者:

    a|b: a或者b

    con(C|c)at

        7.補充

    \<, \b

    \>, \b

    grep與egrep區別

        grep的擴充版本, 改良了許多傳統 grep 不能或不便的操作. 比方說:

        grep 之下不支持 ? 與 + 這兩種 modifier, 但 egrep 則可.

     blob.png

        grep 不支持 a|b 或 (abc|xyz) 這類"或一"比對, 但 egrep 則可.        blob.png

        grep 在處理 {n,m} 時, 需用 \{ 與 \} 處理, 但 egrep 則不需.      blob.png

    fgrep:特別搜索

        無元字符,字符表示字面意思。

命令選項:

    -v: 反向選取,即不包含

    -o: 僅顯示匹配的字串,而非字串所在的行

    -i: ignore-case,忽略字符大小寫

    -E: 支持使用擴展正則表達式

    -A #:Print  NUM  lines of trailing context after matching lines.

    -B #:Print NUM lines of leading context before matching lines.

    -C #:Print NUM lines of output context.  Places a line containing a group separator (–) between contiguous groups of matches.


根據馬哥隨筆,參考(http://www.www58058.com/archives/1198、http://blog.sina.com.cn/s/blog_51dc0fba0100lqu8.html)及度娘整理。

初次發博客,如有遺漏、錯誤煩請告知~


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

(0)
jiangyali518jiangyali518
上一篇 2015-04-01 21:14
下一篇 2015-04-01 21:33

相關推薦

  • Linux基礎

    Linux入門以及文件重定向、用戶管理、軟件管理等

    Linux干貨 2018-03-17
  • hadoop安全模式

    hadoop安全模式在分布式文件系統啟動的時候,開始的時候會有安全模式,當分布式文件系統處于安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結束。安全模式主要是為了系統啟動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的復制或者刪除部分數據塊。運行期通過命令也可以進入安全模式。在實踐過程中,系統啟動的時候去修改和刪除文…

    Linux干貨 2015-04-13
  • grep用法

    一、前言 grep是功能強大的文本處理工具,全稱:global search regular expression and print out the line,grep一行一行使用正則表達式匹配文本,之后對匹配到的文本整行顯示(除非使用特定的選項取反,如 grep -v)。 二、grep用法 grep命令用法:    &nbs…

    Linux干貨 2015-08-24
  • 系統啟動流程相關概念

    前言: 了解系統內核基本知識 內核功能:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能等  用戶空間:應用程序其中有進程或者線程 運行中的系統可分為兩層:內核空間、用戶空間  內核設計流派:  單內核設計:把每種功能集成于一個程序中;例如:linux 微內核設計:每種功能使用一個單獨的子系統實現;例如:Window…

    Linux干貨 2016-09-19
  • Linux Basics–part6

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; tmp]# cp /etc/rc.d/init.d/rc.sysinit /tmp/rc.sysinit tmp]# vim rc.sysinit : 進入末行模式 %s@^[[:space:]]\+@#@g 2…

    Linux干貨 2017-08-24
  • Homework Week-13 samba、vsftp文件共享

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2016-12-05

評論列表(2條)

  • stanley
    stanley 2015-04-02 22:04

    較上次好了很多,如果能加上段落的標識,代碼的格式化,顏色的標識會更好.加油

    • jiangyali518
      jiangyali518 2015-04-02 23:31

      @stanleywhatever,確實不足。感謝提點,會向您提的方向努力~感謝。

欧美性久久久久