(9.1)正則表達式RE

1.重要的文本處理工具

  • 對文本處理的:vim,sed,對文本進行過濾和截取的awk,以及grep都會用到正則
  • 正則表達式:
    正則表達式regular expression,RE,是一種字符模式,用於在查找過程中匹配的指定的字符。
    在大多數的程序裏,正則表達式都被置於兩個正斜線之間,eg:/[oO]ve/就是由正斜槓界定的正則表達式 ,它將匹配被查找的行中任何位置出現的相同模式
    在正則表達式中,元字符是最重要的概念
  • eg:
匹配數字: ^[0-9]+$   
123
##[]範圍中的一個數字,+表示前面的對象出現1次或者多次

匹配Mail
[a-z0-9_]+@[a-z0-9]+\.[a-z]+
[email protected]
##\.這裏的\表示轉義,.的意思類似於shell中的?,表示任意單個字符

匹配IP
[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
##[0-9]{1,3}表示數字0-9出現1-3次數

2.正則表達式元字符

  • 基本表達式的元字符,注意裏面有[ ],( ),{ }
    在這裏插入圖片描述
    eg1:grep ‘^\ <root\ >’ /etc/passwd 表示以root開頭的單詞
    在這裏插入圖片描述
    eg2:
grep '^root' /etc/passwd		表示以root開頭的
grep '^[rc]oot' /etc/passwd		表示以r或者c開頭的
grep '^[^rc]oot' /etc/passwd		表示不以r或者c開頭的

^在[]裏面表示取反,不要
^在[]外面表示以誰開頭


\轉移字符會讓這些元字符失去作用,讓其還回原意。
love\.		表示只匹配love.

\(..\)在vim裏面用的多:
:% s/10.16.130.1/172.16.130.5/		表示將172.16.130.1替換成172.16.130.5
:% s/\(172.16.130.\)1/\15/		表示將172.16.130.1替換成172.16.130.5,其中\1代表\(172.16.130.\)的內容
:3,9s/\(.*\)/#\1/		表示將3-9行給註釋掉

eg3:下面第一個表示o出現2次
在這裏插入圖片描述

  • shell裏面不區分大小寫:ll l[a-z]ve
    在這裏插入圖片描述

3.擴展正則表達四元字符

  • egrep支持擴展元字符,grep不支持擴展元字符
    在這裏插入圖片描述

eg:ss -an|egrep ‘:80|:20>’
在這裏插入圖片描述

4.總結:*,?,+,{}

  • 下面的符號都是對前面的符號負責,用紅色已經標記出來了,後面的表示匹配的次數
    在這裏插入圖片描述

5.POSIX字符類

在這裏插入圖片描述

5.正則匹配eg:vim

/love/		匹配love
/^love/		匹配以love開頭的行
/love$/		匹配love結尾的行
/l.ve/		匹配l任意字符ve
/lo*ve/		匹配l零到多個o可能沒有o的ve
/[Li]ove/	匹配Love或love
/love[a-z]/	匹配love後面跟着小寫字母
/love[^a-zA-Z0-9]/		匹配love非字符

/.*/		匹配整行
/^$/		匹配空行
/^[A-Z]..$/		注意這裏匹配的是3個字符
/^[A-Z][a-z]*3[0-5]/		匹配A-Z開頭的,零到任意多個的a-z字符的,再接着跟着3以及0-5字符
/[a-z]*\./		匹配零到多個小寫字母,後面跟着.
/^ *[A-Z][a-z][a-z]$/			匹配零到多個空格開頭的,跟着[A-Z][a-z][a-z]結尾的行
/^[A-Za-z]*[^,][A-Za-z]*$/		匹配零到多個英文字母開頭,跟着一個非逗號,再跟着一個字母結尾的
/\<fourth\>/			匹配fourth
/\<f.*th\>/			匹配以f開頭,th結尾的單詞
/5{2}2{3}\./		匹配5出現2次

空行,即換行符和回車
/^$/
/^[ \t]*$/ 			零個或多個空格或tab

註釋行
/^#/
/^[ \t]*#/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章