詳解linux正則表達(dá)式(基礎(chǔ)正則表達(dá)式+擴(kuò)展正則表達(dá)式)
正則表達(dá)式應(yīng)用非常廣泛,例如:php,Python,java等,但在linux中最常用的正則表達(dá)式的命令就是grep(egrep),sed,awk等,換句話 說(shuō)linux三劍客要想能工作的更高效,就一定離不開(kāi)正則表達(dá)式的配合。
1、什么是正則表達(dá)式?
簡(jiǎn)單的說(shuō),正則表達(dá)式就是為處理大量的字符串而定義的一套規(guī)則和方法。通過(guò)定義的這些特殊符號(hào)的輔助,系統(tǒng)管理員就可以快速過(guò)濾、替換或者輸出需要的字符串。linux正則表達(dá)式一般以行為單位處理的。
2、為什么要學(xué)正則表達(dá)式
在企業(yè)工作中,我們每天做的linux運(yùn)維工作中,時(shí)刻都會(huì)面對(duì)大量帶有字符串的文本配置、程序、命令輸出及日志文件等,而我們經(jīng)常會(huì)有迫切的需要從大量的字符串內(nèi)容中查找符合工作需要的特定字符串,這就要靠正則表達(dá)式,因此,可以說(shuō)正則表達(dá)式就是為過(guò)濾這樣字符串的需求而生的!
3、容易混淆的兩個(gè)注意事項(xiàng):
1)linux正則表達(dá)式一般是以行為單位處理的。
2)正則表達(dá)式和我們常用的通配符特殊字符是有本質(zhì)區(qū)別的,例如:ls *.txt 這里的*就是通配符(表示所有),不是正則表達(dá)式。
注意字符集問(wèn)題:
確保字符集:export LC_ALL=C
---------------------------------------------
基礎(chǔ)正則表達(dá)式+擴(kuò)展正則表達(dá)式含義解釋?zhuān)?/p>
---------------------------------------------
. 代表且只能代表任意一個(gè)字符(不包括空行)
* 重復(fù)前面任意0個(gè)或多個(gè)字符
.* 匹配所有字符。(包括空行)
sed -ri 's#(.*)#\1#g' bqh.txt
把前面正則匹配的括號(hào)內(nèi)的結(jié)果,在后面用\1取出來(lái)操作。
^ 表示以什么開(kāi)頭,^bqh 以bqh開(kāi)頭
$ 是以什么結(jié)尾
^$ 表示空行。
\ 例\. 就只代表點(diǎn)本身,轉(zhuǎn)義符號(hào),讓有著特殊身份移動(dòng)的字符,脫掉馬甲,還原原型\$
^.* 以任意多個(gè)字符開(kāi)頭。
.*$ 以任意多個(gè)字符結(jié)尾。
(.*) 從第一字符匹配,到空格停止,
[abc] 匹配字符集合內(nèi)的任意一個(gè)字符【a-zA-Z】
[^abc] 匹配不包括^后的任意字符的內(nèi)容;中括號(hào)里的^為取反,注意和以...開(kāi)頭區(qū)別。
a\{n,m\} 重復(fù)n到m次,前一個(gè)重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
\{n,\} 重復(fù)至少n次,前一個(gè)重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
\{n\} 重復(fù)n次,前一個(gè)重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
①^word 搜索以word開(kāi)頭的;vi ^ 一行的開(kāi)夠
②word$ 搜索以word結(jié)尾的;vi $ 一行的開(kāi)頭
③^$ 表示空行。
擴(kuò)展的正則表達(dá)式:ERP(egrep或grep -E)
+ 重復(fù)一個(gè)或一個(gè)以上前面的字符
? 復(fù)0個(gè)或一個(gè)0前面的字符
| 用或的方式查找多個(gè)符合的字符串
() 找出“用戶組”字符串
實(shí)戰(zhàn)舉例:
^m 搜索以m開(kāi)頭的
p$搜索以p結(jié)尾的
^$表示空號(hào)
去掉空行:grep –v “^$” bqh.log
查看去掉的后的空行內(nèi)容:grep -vn “^$” bqh.log
. 代表且只能代表任意一個(gè)字符(不包括空行)
查找?guī)?的字符:
.* 匹配所有字符。(包括空行)
查找以.結(jié)尾的字符:
錯(cuò)誤方法:grep ".$" bqh.log
正確方法:
grep “\.$” bqh.log
注意:\. 就只代表點(diǎn)本身,轉(zhuǎn)義符號(hào),讓有著特殊身份移動(dòng)的字符,脫掉馬甲,還原原型\$
* 例1*重復(fù)1個(gè)或多個(gè)前面的一個(gè)字符。
grep –o “1*” bqh.log //-o精確匹配
^.* 以任意多個(gè)字符開(kāi)頭。
.*$ 以任意多個(gè)字符結(jié)尾。
[abc] 匹配字符集合內(nèi)的任意一個(gè)字符【a-zA-Z】
匹配字符集合內(nèi)的a-z任意一個(gè)小寫(xiě)字符:
[^abc] 匹配不包括^后的任意字符的內(nèi)容;中括號(hào)里的^為取反,注意和以...開(kāi)頭區(qū)別
匹配非數(shù)字的任意字符:
a\{n,m\} 重復(fù)n到m次,前一個(gè)重復(fù)的字符。如果有用egrep/sed -r /grep -E可以去掉斜線。
\{n,\} 重復(fù)至少n次,前一個(gè)重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
\{n\} 重復(fù)n次,前一個(gè)重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
注意:egrep,grep -E或sed -r過(guò)濾一般特殊字符可以不轉(zhuǎn)義。多使用參數(shù)。
---------------------------------------------------------------------------------
擴(kuò)展的正則表達(dá)式:ERP(egrep或grep -E)
+ 重復(fù)一個(gè)或一個(gè)以上前面的字符
? 復(fù)0個(gè)或一個(gè)0前面的字符
| 用或的方式查找多個(gè)符合的字符串
() 找出“用戶組”字符串
總結(jié)
以上所述是小編給大家介紹的詳解linux正則表達(dá)式(基礎(chǔ)正則表達(dá)式+擴(kuò)展正則表達(dá)式),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
asp match正則函數(shù)使用Matchs實(shí)例
asp matchs函數(shù)提供了對(duì)正則表達(dá)式匹配的只讀屬性的訪問(wèn)。一直都用這個(gè)函數(shù),沒(méi)想到本站竟然沒(méi)有這類(lèi)文章,汗一個(gè),最近我會(huì)多加一些這樣的文章2008-08-08PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
這篇文章主要是介紹了PHP preg_match中匹配多國(guó)語(yǔ)言的方法,需要的朋友可以參考下2013-07-07js用正則表達(dá)式控制價(jià)格輸入實(shí)現(xiàn)代碼
js用正則表達(dá)式控制價(jià)格輸入實(shí)現(xiàn)代碼,主要是限制用戶的輸入。2011-11-11正則表達(dá)式檢測(cè)用戶輸入的email地址是否合法
在注冊(cè)系統(tǒng)開(kāi)發(fā)中,需要檢測(cè)用戶輸入的email地址是否合法,都可以使用正則表達(dá)式來(lái)檢測(cè),下面有個(gè)小例子,希望對(duì)大家有所幫助2014-01-01正則表達(dá)式:過(guò)濾<font>和</font>
正則表達(dá)式:過(guò)濾<font>和</font>...2007-04-04