正則表達式應(yīng)用非常廣泛,例如:php,Python,java等,但在linux中最常用的正則表達式的命令就是grep(egrep),sed,awk等,換句話 說linux三劍客要想能工作的更高效,就一定離不開正則表達式的配合。
1、什么是正則表達式?
簡單的說,正則表達式就是為處理大量的字符串而定義的一套規(guī)則和方法。通過定義的這些特殊符號的輔助,系統(tǒng)管理員就可以快速過濾、替換或者輸出需要的字符串。linux正則表達式一般以行為單位處理的。
2、為什么要學正則表達式
在企業(yè)工作中,我們每天做的linux運維工作中,時刻都會面對大量帶有字符串的文本配置、程序、命令輸出及日志文件等,而我們經(jīng)常會有迫切的需要從大量的字符串內(nèi)容中查找符合工作需要的特定字符串,這就要靠正則表達式,因此,可以說正則表達式就是為過濾這樣字符串的需求而生的!
3、容易混淆的兩個注意事項:
1)linux正則表達式一般是以行為單位處理的。
2)正則表達式和我們常用的通配符特殊字符是有本質(zhì)區(qū)別的,例如:ls *.txt 這里的*就是通配符(表示所有),不是正則表達式。
注意字符集問題:
確保字符集:export LC_ALL=C
---------------------------------------------
基礎(chǔ)正則表達式+擴展正則表達式含義解釋:
---------------------------------------------
. 代表且只能代表任意一個字符(不包括空行)
* 重復(fù)前面任意0個或多個字符
.* 匹配所有字符。(包括空行)
sed -ri 's#(.*)#\1#g' bqh.txt
把前面正則匹配的括號內(nèi)的結(jié)果,在后面用\1取出來操作。
^ 表示以什么開頭,^bqh 以bqh開頭
$ 是以什么結(jié)尾
^$ 表示空行。
\ 例\. 就只代表點本身,轉(zhuǎn)義符號,讓有著特殊身份移動的字符,脫掉馬甲,還原原型\$
^.* 以任意多個字符開頭。
.*$ 以任意多個字符結(jié)尾。
(.*) 從第一字符匹配,到空格停止,
[abc] 匹配字符集合內(nèi)的任意一個字符【a-zA-Z】
[^abc] 匹配不包括^后的任意字符的內(nèi)容;中括號里的^為取反,注意和以...開頭區(qū)別。
a\{n,m\} 重復(fù)n到m次,前一個重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
\{n,\} 重復(fù)至少n次,前一個重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
\{n\} 重復(fù)n次,前一個重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
①^word 搜索以word開頭的;vi ^ 一行的開夠
②word$ 搜索以word結(jié)尾的;vi $ 一行的開頭
③^$ 表示空行。
擴展的正則表達式:ERP(egrep或grep -E)
+ 重復(fù)一個或一個以上前面的字符
? 復(fù)0個或一個0前面的字符
| 用或的方式查找多個符合的字符串
() 找出“用戶組”字符串
實戰(zhàn)舉例:
![](/d/20211017/c4f927e8efb6cfeec587ec6c7b778da8.gif)
^m 搜索以m開頭的
p$搜索以p結(jié)尾的
![](/d/20211017/935acc2cd09f36a94dee41e4b97b74a4.gif)
^$表示空號
![](/d/20211017/e4a07bd869ee87f2d60f8d8056ab999f.gif)
去掉空行:grep –v “^$” bqh.log
查看去掉的后的空行內(nèi)容:grep -vn “^$” bqh.log
![](/d/20211017/e9e2361a85964c17308c6821f67214bb.gif)
. 代表且只能代表任意一個字符(不包括空行)
![](/d/20211017/246cbe24e4c23d1220299e2827eab345.gif)
查找?guī)?的字符:
![](/d/20211017/5a7bf23852debce6e97cb95587aa6d33.gif)
.* 匹配所有字符。(包括空行)
![](/d/20211017/4e8347fbd184a0fcd35d2a0088f06024.gif)
查找以.結(jié)尾的字符:
錯誤方法:grep ".$" bqh.log
![](/d/20211017/360e203d7b76f1d361e1f22072c3b693.gif)
正確方法:
grep “\.$” bqh.log
![](/d/20211017/69fc89eae3f8c4c380317b6a34c82e12.gif)
注意:\. 就只代表點本身,轉(zhuǎn)義符號,讓有著特殊身份移動的字符,脫掉馬甲,還原原型\$
* 例1*重復(fù)1個或多個前面的一個字符。
grep –o “1*” bqh.log //-o精確匹配
![](/d/20211017/3aff96443cfbb06b50978b2769d631b0.gif)
^.* 以任意多個字符開頭。
![](/d/20211017/b8d0fd2b5684b17eb60afb43a0fd1d73.gif)
.*$ 以任意多個字符結(jié)尾。
![](/d/20211017/43e2072283d341154ea55d193ec798ec.gif)
[abc] 匹配字符集合內(nèi)的任意一個字符【a-zA-Z】
![](/d/20211017/3e1ef01a0222e7ecdf95b8f48f2ced18.gif)
匹配字符集合內(nèi)的a-z任意一個小寫字符:
![](/d/20211017/375865b08ae0f5e7817aa50004447465.gif)
[^abc] 匹配不包括^后的任意字符的內(nèi)容;中括號里的^為取反,注意和以...開頭區(qū)別
![](/d/20211017/4c2ef22f6706d16626aaa44e71fc1c91.gif)
匹配非數(shù)字的任意字符:
![](/d/20211017/4c7317c458cd330babcac4f9ff1774ce.gif)
a\{n,m\} 重復(fù)n到m次,前一個重復(fù)的字符。如果有用egrep/sed -r /grep -E可以去掉斜線。
![](/d/20211017/2b83083a7afa72820eb8ab8f02a563a8.gif)
\{n,\} 重復(fù)至少n次,前一個重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
![](/d/20211017/e9aa3d83e9829bf0b628f32ad42f8696.gif)
\{n\} 重復(fù)n次,前一個重復(fù)的字符。如果有用egrep/sed -r 可以去掉斜線。
![](/d/20211017/2e07eb9e3e2db137a4763b68f0beab73.gif)
![](/d/20211017/e72c5be1cb568aad7ed77423de7403e5.gif)
注意:egrep,grep -E或sed -r過濾一般特殊字符可以不轉(zhuǎn)義。多使用參數(shù)。
---------------------------------------------------------------------------------
擴展的正則表達式:ERP(egrep或grep -E)
+ 重復(fù)一個或一個以上前面的字符
![](/d/20211017/72dd5ba979272452c811642bc7f15b5b.gif)
? 復(fù)0個或一個0前面的字符
![](/d/20211017/31bc9b99572976d7ea94bf5a20f6b472.gif)
| 用或的方式查找多個符合的字符串
![](/d/20211017/4577370f33faead17306f5adabbf6718.gif)
() 找出“用戶組”字符串
![](/d/20211017/ed449b287241d495875c073e7463b186.gif)
總結(jié)
以上所述是小編給大家介紹的詳解linux正則表達式(基礎(chǔ)正則表達式+擴展正則表達式),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- Linux中的特殊符號與正則表達式
- 淺談Linux grep與正則表達式
- linux下的通配符與正則表達式
- 詳解Linux命令中的正則表達式
- 詳解基于Linux下正則表達式(基本正則和擴展正則命令使用實例)
- linux shell 路徑截取正則表達式
- 使用Linux正則表達式靈活搜索文件中的文本
- linux正則表達式awk詳解