何為正則表達式?

何為正則表達式?

 

UNIX/Linux上有許多文本處理工具,其中最主要最重要要屬grep、sed、和awk三種了,被稱為文本處理三劍客。但是要完全認識他們的各種功能,則必須現在正則表達式及其元字符的使用上打好基礎。

什么是正則表達式?正則表達式(regular expression,RE)是一種字符模式,用于在查找過程中匹配指定的字符。正則表達式的有趣之處在于可以用特殊的元字符來控制他們,以實現強大的匹配功能。

正則表達式元字符

元字符是這樣一類字符,他們表達的不是字面本身的含義,而是代表其它的特定的含義,以此來進行模式匹配界定。

元字符有兩類:shell元字符和正則表達式元字符。

Shell元字符由shell來解析。例如,當用戶輸入命令“rm *”時,命令中的星號“*”就是一個shell元字符,稱為通配符。Shell將其解析為匹配當前工作目錄下的所有文件名。

正則表達式的元字符則是由各種執行模式匹配的程序來解析,譬如vi、grepsed、和awk??梢杂迷址麃矶ㄎ辉谛惺仔形渤霈F的單詞,也可以用元字符指定任意字符或某一組字符,從而對其執行查找及增刪替換等操作。例如,下面的這條sed命令: 

何為正則表達式? 

表示把行首hello單詞替換成大寫的Hello。拖字符”^”代表在行首,”\>”表示單詞的結束。

        有5種基本的元字符可以被UNIX/Linux的所有模式匹配工具識別。表1-1列出了可以在所有版本的viex、grepegrep、sedawk中使用的元字符,其他的則可能適用于部分工具中。

何為正則表達式? 

                   表1-1  正則表達式元字符

何為正則表達式?

                                         表 1-2

下面我們將舉例來講解每個元字符,假定在如下文字中查找。Grep命令能查找被模式匹配到的行并顯示整行內容

何為正則表達式? 

基本正則表達式元字符

1、行首定位符”^”

何為正則表達式? 

拖字符^查找行首開頭的為love的行。 

2、行尾定位符”$

何為正則表達式?

美元$為行尾定位符,此行中day位于行尾,后面緊跟換行符。 

3、任意單個字符”.”

何為正則表達式? 

句號(.)匹配除換行符的任意單個字符。

4、零個或多個前字符”*”

何為正則表達式? 

星號(*)匹配零個或多個前字符,它就像和前面的字符粘在一起一樣,只控制這個字符.匹配次數包括0,如上例中的lv。

5、匹配一組字符的任意一個”[]”

何為正則表達式? 

6、一個范圍中的一個字符”[ – ]”

何為正則表達式? 

方括號中的連字符匹配某一范圍中的一個字符,上例中匹配li后接一個a-z的任意字符,由于匹配的是ASCII值的范圍,所以不能寫成[z-a]

7、不在組內的字符”[^ ]”

何為正則表達式? 

方括號內的拖字符是一個否定元字符。上例中匹配ove后加一個不是az,AZ,且不是0-9的字符,那就可能是空格,標符號如?了。

以上為正則表達式的基本元字符,他們可以組合起來成為更復雜的表達式。

其他表達式元字符

下面的元字符不一定適用于所有使用正則表達式的工具,但可用于vivim編輯器,及某些版本的sedgrep。此外還有一種被egrepawk所使用的擴張正則表達式。

1、詞首定位符\<和詞尾定位符\>

何為正則表達式? 

上例中查找每一行的單詞love.單詞的存在形式可以是:以空格開頭、由標點終結、開始于行首、結束語行尾等,所以字母和數字都是可以屬于單詞的。

2”\( …\)”記錄模式

何為正則表達式? 

上例中第一個被”\(\)”記錄的標記為\1,第二個被”\(\)”記錄的標記為\2,以此類推。如果把他們互相替換,則標簽所代表的被記錄的內容也會交換位置。

3、模式的重復”\{m,n\}”,表示其前面的字符最少重復m次,最多重復n次。

何為正則表達式? 

 

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

(1)
beyondbeyond
上一篇 2016-08-16
下一篇 2016-08-16

相關推薦

  • N25-第九周作業

    第九周 1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # sum_login=0 sum_nologin=0 for i in $(awk -F: ‘{print $7}’ /etc/passwd);do if…

    Linux干貨 2017-03-10
  • sed vim小練

     1 、刪除/etc/grub2.conf 文件中所有以空白開頭的行行首的空白字符  2 、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空 白字符的行的行首的#和空白字符 3 、在/root/install.log 每一行行首增加# [root@localhost ~]# sed -n&nbsp…

    Linux干貨 2016-08-12
  • Linux學習總結&day07-正則表達式&文本處理工具

    第一部分、正則表達式     1、什么是正則表達式     正則表達式就是處理字符串的方法,它是以行為單位來進行字符串的處理行為,正則表達式通過一些特殊符號的輔助,可以讓用戶輕易的達到查找、刪除、替換某特定字符串的處理程序。     正則表…

    Linux干貨 2016-08-08
  • iptables

    Evernote Export   基于本機服務器的iptables: 創建、重命名、刪除自定義chain ~]# iptables -N testchain ~]# iptables -nL Chain INPUT (policy ACCEPT) target     prot opt source    …

    Linux干貨 2016-11-20
  • 網絡管理

                                                 網絡基礎 一.網絡的基本概念 什么是網絡…

    2017-09-02
  • 權限命令總結

    修改文件權限:chmod 1 2 3 4 [root@centos7 ~]# man chmod        chmod [OPTION]… MODE[,MODE]… FILE…    …

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