正則表達式

Regual Expression

由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示字面意義,而是用于控制或通配的功能 分類

REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能

程序支持:grep, vim, less,nginx等

分兩類:

基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep

正則表達式引擎:

采用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)

元字符分類:

字符匹配、匹配次數、位置錨定、分組

man 7 regex

基本正則表達式
擴展正則表達式

grep:文本過濾(模式:pattern)工具;

grep, egrep, fgrep(不支持正則表達式搜索)

sed:stream editor,文本編輯工具;

awk:Linux上的實現gawk,文本報告生成器;


二者區別元字符不同

grep:global search regular expression and print out the line

作用:文本搜索工具,根據用戶指定的模式(過濾條件)對目標文本逐行匹配檢查,打印匹配到的行
模式:有正則表達式的元字符及文本字符所編寫出的過濾條件
    grep [OPTIONS] PATTERN [FILE...]
    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

    grep root /etc/passwd
    grep "$USER" /etc/passwd  #支持變量引用
    grep '$USER' /etc/passwd
    grep `whoami` /etc/passwd #支持命令引用

grep

常見選項:
--color=auto: 對匹配到的文本著色顯示;
-v: 顯示不能夠被pattern匹配到的行;
-i: 忽略字符大小寫
-n:顯示匹配的行號
-c: 統計匹配的行數
-o: 僅顯示匹配到的字符串;
-q: 靜默模式,不輸出任何信息
-A #:after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-e:實現多個選項間的邏輯or關系
    grep –e ‘cat ’ -e ‘dog’ file
-w:整行匹配整個單詞
-E:使用ERE

egrep= grep -E

grep 要用PATTERN就要用引號把PATTERN引上。

正則表達式的元字符

字符匹配----單個字符

    .:點號匹配任意單個字符
    []:匹配指定范圍內的任意單個字符
    [^]:匹配指定范圍外的任意單個字符

    字符集合--代表集合中的所有字符
    Within  a bracket expression, the name of a character class enclosed in 
    "[:" and ":]" stands for the list of all characters belonging to
    that class.  Stan‐dard character class names are:

          alnum   digit   punct
          alpha   graph   space
          blank   lower   upper
          cntrl   print   xdigit

    字符集合在模式中必須為   [[:xxxx:]]  格式代表字符集中的一個

    字符集合與其他字符使用時[a[:xxxx:]b]      [^[:xxxx:]]  

        [:digit:],[:lower:],[:upper:],[:alpha:],[:punct:],[:space:],[:alnum:]



匹配次數-----------(正則表達式工作在貪婪模式下有多長匹配多長)用在要指定其出現的次數的字符的右側,用戶限制其前面字符出現的次數。

    *:  匹配其前面字符任意次--0,1或多次(可有可無或重復多次)
    .*  匹配任意長度的任意字符
    \?  匹配其前的字符0次或1次,即前面的字符可有可無
    \+  匹配其前面的字符1次或多次,即前面的字符出現至少一次

    \{m\}匹配其前面的字符m次,精確次數匹配
        \{m,n\}匹配前面的字符至少m次,至少n次
        \{0,n\}匹配前面的字符至多n次
        \{m,\}匹配前面的字符至少m次,多了不限

位置錨定---錨定整個patter

    ^:行首錨定;用于模式的最左側
    $:行尾錨定;用模式的最右側
    ^PATTERN$:用于匹配整行
    ^$:空白行錨定,沒有任意字符(包括空白字符)
    ^[[:space:]]*$:空白行或包含空白字符的行

    單詞:非特殊字符組成的------連續字符(的字符串包括數字)都稱為單詞

        \<或\b:詞首錨定,用于單詞模式的左側
        \>或\b:詞尾錨定,用于單詞模式的右側
        \<PATTERN\>匹配完整單詞
        \bPATTERN\b

分組及引用 \(PATTER\)或\(指定的字符串\)
    \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理
    \(xy\)*ab
    xy出現0次1次或多次
    注:分組括號中的模式匹配到的內容,會被正則表達式引擎自動記錄于內部的變量中,這些變量為
    \1
    \2
    \3
    ......
后向引用:
grep “\(l..e\)*\1”
引用前面的分組括號中的模式所匹配到的字符

擴展正則表達式的元字符

字符匹配
    .:任意單個字符
    []:指定范圍內的任意單個字符
    [^]:指定范圍外的任意單個字符
    次數匹配
    *:任意次0,1或多次
    ?:0次或1次
    {m}匹配其前字符m次
    {m,n}:匹配其前字符最少m次,最多n次
    {0,m}:匹配其前字符最多m次
    {m,}:匹配最少m次
位置錨定
    ^:行首錨定
    $:行尾錨定
    \<:詞首錨定
    \>:詞尾錨定
或
    a|b  整個右側或左側
    C|cat   C或cat
    (C|c)at     Cat或cat

分組及引用:
    ():分組
        后向引用:
        \1
        \2
        \3

grep

支持基本正則表達式
-E支持擴展正則表達式
-F不使用正則表達式

egrep

支持擴展正則表達式
-G支持基本正則表達式
-F不使用正則表達式

fgrep

當無需要用到元字符去編寫模式時,使用fgrep性能更好

不支持正則表達式
-E支持擴展正則表達式
-G支持基本正則表達式

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

(0)
yywyyw
上一篇 2016-08-07 22:05
下一篇 2016-08-07 22:06

相關推薦

  • 磁盤管理(二)之swap、dd工具使用

    磁盤管理(二)之swap、dd工具使用   一、掛載點和/etc/fstab   (1)配置文件/etc/fstab,當系統啟動時,自動加載該文件,會把寫在配置文件里面的所有掛載點全部自動掛載上去,只要按照格式寫,就不會丟失。   (2)文件掛載配置文件,如下圖:    &nbs…

    Linux干貨 2016-08-29
  • 三劍客之一sed命令

    sed sed ‘2p’ /etc/passwd  打印paswwd的第二行 這樣執行結果看能看出第二行顯示兩次 sed -n ‘2p’ /etc/passwd -n 執行后 會取出當前行顯示. n是關閉打印  例如[root@cent7 ~]#ifconfig ens33|sed -n &…

    Linux干貨 2017-08-13
  • 馬哥linux0803作業內容

    1. 創建sysadmins組 將用戶user1,user2,user3加入sysadmins組中 將user3設置為sysadmins的管理員 用user3登錄,將user2從組中移除 設置sysadmins的密碼centos 設置user1 在創建新文件時,文件的所屬組為sysadmins 刪除user1…3 刪除sysadmins 2、三種權限rwx對…

    Linux干貨 2016-08-08
  • Net25 第二周作業

    一、Linux上的文件管理類命令,其常用的使用方法和相關示例 1、ls:查看文件與目錄 作用:ls命令用于顯示目錄內容,類似于DOS下的dir命令,它的使用權限是所有用戶。 用法:ls [選項]…[文件]… 主要選項如下: -a:全部的文件,連同隱藏文件(開頭為 .的文件)一起列出來 -A:列出全部的文件(連同隱藏文件,但不…

    系統運維 2016-12-11
  • LVM2 ( Blog4 )

    LV基本應用,擴展及縮減實現

    Linux干貨 2017-11-27
  • 在linux中創建虛擬網卡(網卡別名)的方法

    由于業務需要,要在單個物理網卡上建立多個虛擬網卡,操作如下:cd /etc/sysconfig/network-scripts/   #進入網卡目錄cp ifcfg-eth0 ifcfg-eth0:1   # 復制出ifcfg-eth0:1虛擬網卡vim ifcfg-eth0:1    #配置ifcfg-eth0:1虛…

    Linux干貨 2016-09-06
欧美性久久久久