正則表達式

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
下一篇 2016-08-07

相關推薦

  • 查找幫助功能、Linux文件系統目錄標準LHS介紹

    查找幫助 命令自帶   COMMAND –help                      COMMAND -h 使用手冊 man COMMAND…

    Linux干貨 2016-10-30
  • 服務器故障的解決方法以及基本腳本的編寫

    1,當開機時一直重新啟動怎么辦? 在開機時就如字符界面后按下a鍵然后進入單用戶模式,通過設置 [root@CentOS6 boot]# vim /etc/inittab 這個文件,將里面的開機啟動項改為多用戶模式就可。 # id:3:initdefault: “/etc/inittab” 26L, 884C 講id這項設置完成后重新啟動就好。 2,忘記roo…

    Linux干貨 2017-05-15
  • 馬哥教育網絡班21期-第四周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp -a /etc/skel/ /home/tuser1 chmod -R 700 /home/tuser1/  2、編輯/etc/group文件,添加組hadoop。 echo "hadoop:x:2…

    Linux干貨 2016-08-05
  • MairaDB之基于openssl的主從復制

    一、配置openssl   1、   在master server(node0)上根CA的搭建(及生成自簽名證書) [root@node0 ~]# cd /etc/pki/CA/ [root@node0 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) Gen…

    2014-10-03
  • LVM邏輯卷管理

    一、簡述 什么是邏輯卷?LVM(Logical Volume Manager)利用Linux內核device-mapper實現存儲系統的虛擬化。通過LVM,把底層存儲硬件抽象化成存儲邏輯塊,再將這些邏輯塊集合構成存儲池,從存儲池空間劃分分區,可以簡單地擴大或縮小分區,而不用擔心硬盤沒有足夠的連續空間。 使用邏輯卷分區有什么用?使用邏輯卷分區重點在于可以彈性地…

    Linux干貨 2016-09-06
  • linux 權限相關知識

    linux day 6     用戶、組和權限 1.Linux用戶:Username/UID         管理員:root, 0         普通用戶:1-65535             …

    Linux干貨 2016-08-08
欧美性久久久久