shell正則表達(dá)式

通配符 ? ? ? ?    意義

*         匹配任意多個(gè)字符(包括零個(gè)或一個(gè))
  ?         匹配任意一個(gè)字符(不包括零個(gè))
  [characters]    ?匹配任意一個(gè)屬于字符集中的字符
  [!characters]    匹配任意一個(gè)不是字符集中的字符
  [[:class:]]     ?匹配任意一個(gè)屬于指定字符類中的字符

成都創(chuàng)新互聯(lián)公司“設(shè)計(jì)定江山,服務(wù)贏天下“的思想,用細(xì)節(jié)和態(tài)度獲得客戶的認(rèn)可與同行的尊重,服務(wù)是成都創(chuàng)新互聯(lián)公司企業(yè)文化中重要的核心思想,每一位員工要致力成為客戶心中堅(jiān)實(shí)的服務(wù)后盾。

 

  ? 字符類         意義

 [:alnum:]      匹配任意一個(gè)字母或數(shù)字
  [:alpha:]       匹配任意一個(gè)字母
  [:digit:]       ?匹配任意一個(gè)數(shù)字
  [:lower:]      ?匹配任意一個(gè)小寫字母
  [:upper]       匹配任意一個(gè)大寫字母



基礎(chǔ)正則表達(dá)式符號(hào)

符號(hào)描述實(shí)例
.代表單個(gè)字符(必須存在)

a..b

可以表示acdb

? ? ? aaab 、abbbb

但不可以表示acb、ab、aba等

*

要和通配符區(qū)分開,匹配 * 前面一個(gè)字符的0個(gè)或多個(gè)

*后面的字符一定要在*前面字符的后面

另外*前后字符必須相鄰否則匹配不到

a*b

可以表示ab、aab、b、abababab

但不可以表示acb、ba等

acb只會(huì)匹配到b,也就是視為b前面有0個(gè)a

ba也只會(huì)匹配到b,同樣視為b前面有0個(gè)a

^匹配 ^ 后面字符串開頭

?輸入:echo? -e? abcd\accc | grep "^ab"

輸出:abcd

$?匹配 $ 前面字符串結(jié)尾??

?輸入:echo? -e? abcd\accc | grep "cc$"

輸出:accc

?.*?匹配任意個(gè)字符(0到多個(gè))

?a.*b

和通配符里面的 * 大致類似

可以代表ab、 acb、 a……b

但不能代表b……a

?[]

?表示范圍,可以用來(lái)進(jìn)行模糊匹配

常用選項(xiàng)為【a-z】 【0-9】

1.? grep【0-9】 text 過(guò)濾出含數(shù)字的行

2.? grep【a-z】 text 過(guò)濾出含小寫字母的行

3.?grep 【abc】 text 過(guò)濾出含有a,b,c的行(注意這個(gè)abc是分別匹配,也就是相當(dāng)于匹配含有a的行,b的行,c的行,并不是字符串a(chǎn)bc的行)

?{}

{n,m}表示匹配 {}?前面字符的至少n個(gè),最多m個(gè) 字符,注意:是連在一起的連續(xù)字符

還可以為{n,}表示至少有n個(gè)

{,m}表示最多有m個(gè)

?1.輸入echo abbcdfbjk | grep -E "b{1,2}"

輸出?abbcdfbjk?

2.如果?輸入 echo abbcdfbjk | grep -E "b{2,}"? #表示至少兩個(gè)

輸出結(jié)果為?abbcdfbjk? 可以看到只有連在一起的兩個(gè)bb被匹配到,也就是說(shuō)明了{(lán)}里面的數(shù)字表示的不是匹配到的個(gè)數(shù),而是匹配字符的長(zhǎng)度,像這個(gè)例子就是要求出現(xiàn) b 的長(zhǎng)度至少是2,所以只有 bb 被匹配到了

3.?輸入 grep -E "ac{2,5}b"?匹配a和b之間至少2個(gè)最多5個(gè)c的行,但是acb要連在一起

?【^】?【^a】表示匹配 a 以外的所有字符

?輸入? echo? -e abc \ def \ lmn | grep "[^f-z]"

輸出? abc? def lmn,只有[a-e]配匹配到

?^[^]?匹配 ^[^a]中的以a為開頭以外的所有行?grep "^[^#]"? /etc/passwd? ?匹配? /etc/passwd? 里面不以#開頭的所有行
\<? ;? \>

錨定 單詞首部 (尾部)??

表示在匹配在首部(尾部)以空格或特殊字符為分隔的指定字符。如果同時(shí)錨定首尾? \<? \>? 則表示這個(gè)字符的準(zhǔn)確匹配,它的前后為特殊字符或空格分隔,不會(huì)和任何字符直接連接

注意:必須要加 \ 轉(zhuǎn)義,即使使用擴(kuò)展正則也要加? \? 進(jìn)行轉(zhuǎn)義

?輸入?:echo "hi,rootamroot" | grep "\<root"
輸出:hi,rootamroot

輸入: echo "hiroot iamroot" | grep "root\>"
輸出: hiroot?iamroot

?輸入: echo "hi,root? iamroot" | grep "\<root\>"
輸出:hi,root??iamroot

?()

?\1? 調(diào)用前面的參數(shù)—第一個(gè)分組(也就是括號(hào)里的參數(shù))

如果用擴(kuò)展正則則不需要 \ 來(lái)進(jìn)行轉(zhuǎn)義

?

過(guò)濾出一行中有兩個(gè)相同數(shù)字的行

# grep "\([0-9]\).*\1"? /etc/passwd

過(guò)濾出行首和行位字母相同的行

# grep "^\([a-z]\).*\1$" /etc/passwd

擴(kuò)展正則

擴(kuò)展正則包含基礎(chǔ)正則,而且多出了? +? ? ?? ?|? ? ()四個(gè)指令(注意這里的 | 要和管道符分開)   擴(kuò)展正則不需要像基礎(chǔ)正則一樣對(duì)某些符號(hào)進(jìn)行轉(zhuǎn)義(一般是用 反斜杠? \? 來(lái)進(jìn)行)

?

+?

作用:重復(fù)一個(gè)或者一個(gè)以上的前一個(gè)字符

示例:執(zhí)行“egrep -n 'wo+d' test.txt”命令,即可查詢"wood" "woood" "woooooood"等字符串

? ?

?

作用:零個(gè)或者一個(gè)的前一個(gè)字符

示例:執(zhí)行“egrep?-n 'bes?t' test.txt”命令,即可查詢“bet”“best”這兩個(gè)字符串

? ?

|?

作用:使用或者(or)的方式找出多個(gè)字符

示例:執(zhí)行“egrep -n 'of|is|on' test.txt”命令即可查詢"of"或者"if"或者"on"字符串

? ?

() ?

作用:查找“組”字符串

示例:“egrep -n?'t(a|e)st' test.txt”?!皌ast”與“test”因?yàn)檫@兩個(gè)單詞的“t”與“st”是重復(fù)的,所以將“a”與“e”列于“()”符號(hào)當(dāng)中,并以“|”分隔,即可查詢"tast"或者"test"字符串

? ?

()+??

作用:辨別多個(gè)重復(fù)的組

示例:“egrep -n?'A(xyz)+C' test.txt”。該命令是查詢開頭的"A"結(jié)尾是"C",中間有一個(gè)以上的 "xyz"字符串的意思

? ?


網(wǎng)站欄目:shell正則表達(dá)式
文章位置:http://muchs.cn/article40/pdheho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、App開發(fā)、、網(wǎng)站策劃外貿(mào)建站、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管