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]*#/