剛開始學習正則表達式時候,感覺和看無字天書沒什么分別,迷茫了一段時間后,仔細去理解,慢慢你會發現也沒什么的。認真去鉆研了,多練習,是可以理解他們的含義的。也許正如老師所言,學習linux ,入門的確很陡峭,對于我這個基礎薄弱,智商低于80的人來說的確很吃力。
關于正則概念的就不去描述了,說起來真的不好表達,下面通過一些實例來進行深入理解吧。
- 1.顯示當前系統上面的root,fedora,或usr1的默認shell
[root@dxlcentOS ~]# egrep “^(root|fedora|user1)” /etc/passwd | cut -d: -f7
/bin/bash
/bin/tcsh
/bin/bash
這實例用到了正則的或”|”,^(root|fedora|user1)表示這三個其中一個出現行首的對進行匹配,后面的cut就不用說了,匹配后進行切割出來。
- 2.找出/etc/rc.d/init.d/functions文件中的某單詞后面跟一組小括號的行,如hello()
[root@dxlcentOS ~]# egrep “<[[:alnum:]]+>()” /etc/rc.d/init.d/functions
checkpid() {
daemon() {
killproc() {
[root@dxlcentOS ~]# egrep -o “[[:alnum:]]+()” /etc/rc.d/init.d/functions 不要錨定詞首和詞尾也行
checkpid()
checkpids()
kill()
……..
- 3.使用一個echo命令輸出一個絕對路徑名,使用grep取出其基名。再嘗試取路徑名
[root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | cut -d/ -f5
functions
[root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | cut -d/ -f1-4 取路徑名
/etc/rc.d/init.d
[root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | egrep -o “[/].*/”
/etc/rc.d/init.d/?取路徑名,以“/”開始中間跟任意字符,以“/”結束
[root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | egrep -o “[^/]+$”
functions?取基名:以非“/”開始,“$”錨定行尾,匹配行尾出現1次以上的字符
- 4.找出ifconfig命令結果中的0-255之間的數字
[root@dxlcentOS ~]# ifconfig | egrep -o “<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>”
192
168
0
196
255
………….
[0-9] 匹配一位數。 [1-9][0-9] 匹配兩位數。1[0-9][0-9] 匹配100-199之間的數。2[0-5][0-5] 匹配200-255之間的數值?!皘”表示或。([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])表示分組。<…>表示錨定詞首和詞尾??傮w的理解是首先進行0-255的數值定好,錨定他們一位數,兩位數,三位數分別作為一個整體然后進行匹配。有了這個基礎匹配下面的ip地址就容易理解了。
- 5.用grep匹配出ifconfig命令結果的合理的IP地址
[root@dxlcentOS ~]# ifconfig | egrep “<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>.(<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>.){2}<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>”
inet 192.168.0.196 netmask 255.255.255.0 broadcast 192.168.0.255
inet 192.168.0.113 netmask 255.255.255.0 broadcast 192.168.0.255
inet 127.0.0.1 netmask 255.0.0.0
第一步:先把0-255的數值匹配出來。第二步:再把IP地址之間的“.”匹配出來,(<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>.){2} 中間匹配兩次。第三步匹配最后一個IP地址數值。
用grep過濾IP地址的確是比較麻煩。為了理解正則很有幫助。用awk sed,cut等工具很快可以取IP地址。
- 6.寫一個模式,能匹配出所有電子郵件地址
首先了解下郵箱的格式:
1)郵箱里面必須包含@符。
2)用戶名,@前面的字符,可以自己選擇。由字母a-z(不區分大小寫)、數字0-9;只能以數字或字母開頭和結尾,例如:tom_cat;用戶名長度為4~18個字符 。
3)郵箱必須以頂級域名 .com ,.cn , .edu .org .net 等結尾。
4) 字符”@”和 “. “之間只能是小寫字母和數字組成,不能有特殊字符,長度2-12個。
[root@dxlcentOS ~]# grep -E “[[:alnum:]]{4,18}@[[:alnum:]]{2,14}.(com|cn|net|org)” /tmp/email
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88181