正則表達式的概念和用法

概念

正則表達式是對字符串操作的一種邏輯表達方式,很多情況下我們需要在茫眾多的文件中找到我們需要的文件時,就需要用到正則表達式了

正則表達式就如同一個過濾器,能夠篩選出希望得到的字符串。它可以檢索、替換符合我們自己規定格式的所有文本。

  • 正則表達式分兩類

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

正則表達式的用法和選項

在Linux中,正則表達式通常會配合文本過濾工具grep使用。

  • grep的功能強大,且簡單粗暴。

正則表達式的概念和用法 

正則表達式的概念和用法

以/etc目錄為例

我們用grep來篩選一下其中含有”li”的文件

 

正則表達式的概念和用法

這是利用grep在/etc中對字母”li”進行篩選

如果我們只想要以”li”為首字母的文件要怎么做呢?
這就需要用到正則表達式了

正則表達式的概念和用法

可以看到依靠正則表達式能很輕松的達到我們想要的結果。

正則表達式還有更多更強大的功能,讓我們來了解一下吧。

  • 正則表達式
    正則表達式的元字符分類:匹配字符、匹配字數、位置錨定、分組

    • 字符匹配:

      匹配任意單個字符
      []              匹配指定范圍內的任意單個字符
      [^]             匹配指定范圍外的任意單個字符
      [[:alnum:]]     字母和數字
      [[:alpha:]]     代表任何英文大小寫字符,亦即 A-Z, a-z
      [[:lower:]]     小寫字母 
      [[:upper:]]     大寫字母
      [[:blank:]]     空白字符(空格和制表符) 
      [[:digit:]]     十進制數字
      [[:xdigit:]]    十六進制數字
      [[:graph:]]     可打印的非空白字符
      [[:print:]]     可打印字符
      [[:punct:]]     標點符號
    • 正則表達式的概念和用法

      正則表達式的概念和用法

     

    • 匹配字數(””為轉譯符,防止系統將某些字符當命令處理)

      \*      匹配前面的字符任意次,包括0次
      
      \+      匹配前面的字符1次以上,不包括0次
      
      *?      匹配前面任意次,但盡可能少重復
      
      .*      任意長度的任意字符
      
      \?      匹配其前面的字符0或1次
      
      \+      匹配其前面的字符至少1次
      
      \{n\}   匹配前面的字符n次
      
      \{m,n\} 匹配前面的字符至少m次,至多n次
      
      \{,n\}  匹配前面的字符至多n次
      
      \{n,\}  匹配前面的字符至少n次
    • 正則表達式的概念和用法

      正則表達式的概念和用法

    • 位置錨定 :

      ^   行首錨定,用于模式的最左側
      
      $   行尾錨定,用于模式的最右側
      
      \< 或 \b     詞首錨定,用于單詞模式的左側
      
      \> 或 \b     詞尾錨定;用于單詞模式的右側
      
      \<PATTERN\> 匹配整個單詞
    • 分組

      分組 : \(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理,如 : \(root\)+

      后向引用 : 引用前面的分組括號中的模式所匹配字符,而非模式本身

      或者 : \|

    • 正則表達式的概念和用法

  • 擴展正則表達式
    擴展正則表達式是正則表達式的優化版,元字符的表達更簡潔,更方便。
    在grep中需要加選項 “-e” 來啟用擴展正則表達式或egrep(=grep -e)

    • 在字符匹配中的雙中括號在擴展正則表達式中可以簡寫為一個

      [ : alnum : ]   字母和數字
      [ : alpha : ]   代表任何英文大小寫字符,亦即 A-Z, a-z
      [ : lower : ]   小寫字母 
      [ : upper : ]   大寫字母
      [ : blank : ]   空白字符(空格和制表符) 
      [ : digit : ]   十進制數字
      [ : xdigit : ]  十六進制數字
      [ : graph : ]   可打印的非空白字符
      [ : print : ]   可打印字符
      [ : punct : ]   標點符號
    • 大部分轉譯符(\)可以省略

      *: 匹配前面字符任意次
      
      ? : 0或1次
      
      +: 1次或多次
      
      {m} : 匹配m次
      
      {m,n} : 至少m,至多n次
      
      a|b : a或b
      
      C|cat : C或cat
      
      (C|c)at : Cat或cat

總結

正則表達式的功能很強大且很好用,理解上也可能對于字符表達的含義會有些混亂需要多用多記才能熟練掌握。

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

(0)
kstg5663294kstg5663294
上一篇 2017-06-10
下一篇 2017-06-11

相關推薦

  • linux系統基礎目錄結構及功能說明

    linux系統基礎目錄結構及功能說明 [root@localhost /]# ls bin boot dev etc home host lib lib64 media mnt opt proc root run sbin srv sys tmp usr var /bin:所有用戶可用的基本命令程序文件;/sbin:供系統管理使用的工具程序;/boot:引導…

    Linux干貨 2018-03-04
  • 請使用命令行展開功能來完成以下練習

    (1)、創建/tmp目錄下的:ac, ad, bc, bd ]# mkdir -p /tmp/{a,b}_{c,d} 或者: ]# touch /tmp/{a,b}_{c,d} (2)、創建/tmp/mylinux目錄下的: ]# mkdir -pv /tmp/mylinux/{bin,boot/gtub,dev,etc/{rc.d/init.d,sysco…

    Linux干貨 2016-11-06
  • 網絡N22期-第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who | cut -d" " -f1 | uniq root 2、取出最后登錄到當前系統的用戶的相關信息。 [roo…

    Linux干貨 2016-08-29
  • linux基礎學習第十天(文件查找與壓縮)

    2016-08-12 授課內容: shell的流程控制 文件查找和壓縮 shell的流程控制: 過程式編程語言: 順序執行 選擇執行 循環執行(未講) 順序執行: if語句: 單分支 if 判斷條件; then 條件為真的分支代碼 fi 雙分支 if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi 多分支 if CONDITIO…

    Linux干貨 2016-08-15
  • 2016-08-18博客作業

    case 語句 條件判斷語句 case 用 變量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; … *) 默認分支 ;; esac   case 支持glob 風格的通配符: *       任意長度任意字符 ?    &…

    Linux干貨 2016-09-19
  • Linux的自動化安裝實現

    在介紹自動化安裝系統之前讓我們來回顧一下系統的啟動流程,系統的啟動大概分為一下幾個步驟:加電自檢 boot sequence(mbr)— boot loader –>kernel(initramfs)—>rootfs  /sbin/init大概就是這么幾個過程了,接下來來介紹系統的安裝,安裝系統雖然看起來簡單,普…

    系統運維 2016-09-19
欧美性久久久久