溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux當(dāng)中的正則/擴(kuò)展表達(dá)式(grep篇)

發(fā)布時(shí)間:2020-08-25 07:58:30 來源:網(wǎng)絡(luò) 閱讀:335 作者:wx5c1cfd6e22842 欄目:系統(tǒng)運(yùn)維

正則表達(dá)式在linux當(dāng)中我們?nèi)ナ褂胹hell腳本的時(shí)候經(jīng)常會用到正則表達(dá)式,所以整理一些我們會用到的表達(dá)式,以便提升shell腳本能力

一、正則表達(dá)式(1)
通過grep命令實(shí)踐正則表達(dá)式
比如我們?nèi)ミ^濾帶有bbb字段的行,直接可以通過grep "xx" file去獲取到

[root@zhaocheng ~]# cat test1
aaa bbb ooo
cccc dddd eeee
fffff ggggg hhhhh bbbbb
kkkkk pppppp ssssss xxxxxx   mmmmmmmm
[root@zhaocheng ~]# grep "bbb" test1
aaa bbb ooo
fffff ggggg hhhhh bbbbb

比如去過濾出以aaa開頭的行,我們就需要使用^去匹配了,^表示固定行首
引號加不加都可以

[root@zhaocheng ~]# grep "^aaa" test1
aaa bbb ooo
[root@zhaocheng ~]# grep '^aaa' test1
aaa bbb ooo
[root@zhaocheng ~]# grep ^aaa test1
aaa bbb ooo

^是匹配行首,而$是匹配行尾,可以試一下,引號也可以不加

[root@zhaocheng ~]# grep mm$ test1
kkkkk pppppp ssssss xxxxxx   mmmmmmmm
[root@zhaocheng ~]# grep 'mm$' test1
kkkkk pppppp ssssss xxxxxx   mmmmmmmm
[root@zhaocheng ~]# grep "mm$" test1
kkkkk pppppp ssssss xxxxxx   mmmmmmmm

比如匹配一個(gè)單詞,直接可以使用^xx$也就是匹配行首與行尾,grep -n 順便輸出行號,--color顏色

[root@zhaocheng ~]# grep ^today$ test1
today

[root@zhaocheng ~]# grep -n --color ^today$ test1
1:today
[root@zhaocheng ~]# grep -n  ^today$ test1
1:today

那么^$是空行的意思,匹配空行,在第四行輸出一個(gè)空格,使用^$也能匹配到

[root@zhaocheng ~]# grep ^$ test1

[root@zhaocheng ~]# grep -n ^$ test1
4:

在grep中去匹配一個(gè)詞的詞首或者詞尾

[root@zhaocheng ~]# grep "\<Beijing" test1
Beijing
[root@zhaocheng ~]# grep "beijinG\>" test1
beijinG
[root@zhaocheng ~]# grep "\<B" test1
Beijing
[root@zhaocheng ~]# grep "G\>" test1
beijinG

也可以固定詞首與詞尾

[root@zhaocheng ~]# grep -n --color "\<beijin\>" test1
6:Beijing is beijin ya

除了\<固定詞首還可以使用\b也可以規(guī)定詞首
除了\>固定詞尾還可以使用\b也可以固定詞尾

[root@zhaocheng ~]# grep -n --color "\bccc" test1
5:cccc dddd eeee

[root@zhaocheng ~]# grep -n --color "eee\b" test1
5:cccc dddd eeee

[root@zhaocheng ~]# grep -n --color "\beeee\b" test1
5:cccc dddd eeee

這個(gè)b還有一個(gè)兄弟B,這個(gè)屬于是匹配“非單詞邊界的"
可以看出匹配第一個(gè)bb的時(shí)候是除了bb開頭之外的詞首都匹配到了
下面的匹配除了匹配到bbb開頭的詞首其他的都去匹配

[root@zhaocheng ~]# grep -n --color "\Bbb" test1
2:aaa bbb ooo
7:fffff ggggg hhhhh bbbbb
[root@zhaocheng ~]# grep -n --color "\Bbbb" test1
7:fffff ggggg hhhhh bbbbb

小結(jié):
^:表示固定行首,詞字符后面任意內(nèi)容必須出現(xiàn)在行首,才能匹配
$:表示固定行尾,詞字符前面的任意內(nèi)容必須出現(xiàn)在行尾,才能匹配
^$:表示匹配空行,這里所描述的空行表示‘回車’,而空格或tab,等都不能算作此處所描述的空行
^abc$:表示abc獨(dú)占一行時(shí),會被匹配到
\<或者\(yùn)b:匹配單詞邊界,表示固定詞首,其后面的字符必須作為單詞首部出現(xiàn)
\>或者\(yùn)b:匹配單詞邊界,表示固定詞尾,其前面的字符必須作為單詞尾部出現(xiàn)
\B:匹配非單詞邊界,與\b相反

二、正則表達(dá)式(2)
找出文本中有哪幾行包含兩個(gè)連續(xù)的字母image
比如找出yaml文件中有哪些以image開頭的單詞

[root@zhaocheng files]# grep -n "image" coredns.yaml 
111:        image: zhaocheng172/coredns:1.2.2
112:        imagePullPolicy: IfNotPresent

如果一個(gè)文本中有很多的單詞,但是只想去匹配單詞中相同的字段的含有兩個(gè)連續(xù)的

[root@zhaocheng ~]# grep -n "b\{2\}" test3
4:bb
6:bbb

[root@zhaocheng ~]# grep -n "a\{2\}"  test3
1:aa
3:aaa a a aa
8:aaiip
9:aallo aahuy


匹配次數(shù)的正則符號 , 這個(gè)我們經(jīng)常會用到,匹配任意字符的時(shí)候
表示匹配任意長度的任意字符
但是在正則表達(dá)式中,表示之前的字符連續(xù)出現(xiàn)任意次數(shù)(包括0次)
比如匹配a
p也就是a可以出現(xiàn)任意次,但是后面必須有p跟著

[root@zhaocheng ~]# grep -n "a*p" test3
7:appaly aoopa
8:aaiip

*匹配o也就是o之后的任意字符**

[root@zhaocheng ~]# grep -n --color "o*" test2
1:aaa#bbb#ooo
2:cccc#dddd#eeee
3:fffff#ggggg#hhhhh
4:kkkkk#pppppp#ssssss

在通配符中表示任意長度字符,在正則表達(dá)式中而用.來匹配

[root@zhaocheng ~]# grep -n --color "o.*" test1
1:today
2:aaa bbb ooo

正則表達(dá)式中的.代表后任意一個(gè)單個(gè)字符,..就是任意兩個(gè)字符都會匹配到

[root@zhaocheng ~]# grep -n "y." test
6:sync:x:5:0:sync:/sbin:/bin/sync
[root@zhaocheng ~]# grep -n "y.." test
6:sync:x:5:0:sync:/sbin:/bin/sync
[root@zhaocheng ~]# grep -n "y..." test
6:sync:x:5:0:sync:/sbin:/bin/sync

三、正則表達(dá)式(3)常用符號
[[:alpha:]]是匹配所有任意字母帶字母的

[root@zhaocheng ~]# grep "[[:alpha:]]" test4
a
a9o
afghj9gh
abcd
aBDc
abdD
a124
a1a4
a%

前面加個(gè)a也就是一個(gè)帶字母的,默認(rèn)

[root@zhaocheng ~]# grep "a[[:alpha:]]" test4
afghj9gh
abcd
aBDc
abdD

也就是匹配a后面三個(gè)帶字母的

[root@zhaocheng ~]# grep "a[[:alpha:]]\{3\}" test4
afghj9gh
abcd
aBDc
abdD

匹配a后面2個(gè)帶字母的

[root@zhaocheng ~]# grep "a[[:alpha:]]\{2\}" test4
afghj9gh
abcd
aBDc
abdD

比如三個(gè)字符都必須是小寫的話
可以使用[[:lower:]] 表示任意小寫字母

[root@zhaocheng ~]# grep "a[[:lower:]]" test4
afghj9gh
abcd
abdD
[root@zhaocheng ~]# grep "a[[:lower:]]\{2\}" test4
afghj9gh
abcd
abdD


也可以使用表示任意大寫字母

[[:upper:]]

[root@zhaocheng ~]# grep "a[[:upper:]]\{1\}" test4
aBDc
[root@zhaocheng ~]# grep "a[[:upper:]]\{2\}" test4
aBDc

常用符號
[[:alpha:]] 表示任意大小寫字母
[[:lower:]] 表示任意小寫字母
[[:upper:]] 表示任意大寫字母
[[:digit:]] 表示0-9之間的任意單個(gè)數(shù)字(包括0和9)
[[:alnum:]] 表示任意數(shù)字或字母
[[:space:]] 表示任意空白字符,包括空格,tab健
[[:punct:]] 表示任意標(biāo)點(diǎn)符號

除了[[:lower:]]可以代表小寫字母,另外一個(gè)”[a-z]"也可以表示任意一個(gè)小寫字母,[[:lower:]]和[a-z]是一樣的

[root@zhaocheng ~]# grep "[a-z]" test4
a
a9o
afghj9gh
abcd
aBDc
abdD
a124
a1a4
a%
[root@zhaocheng ~]# grep "[[:lower:]]" test4
a
a9o
afghj9gh
abcd
aBDc
abdD
a124
a1a4
a%

同理大寫[A-Z]和[[:upper:]]也是一樣的

[root@zhaocheng ~]# grep "[A-Z]" test4
aBDc
abdD
[root@zhaocheng ~]# grep "[[:upper:]]" test4
aBDc
abdD


使用兩種方法來過濾出a字母之后2個(gè)的字符
[[:lower:]]小寫
[[:upper:]] 大寫

[root@zhaocheng ~]# grep "a[a-z]\{2\}" test4
afghj9gh
abcd
apooo
aiuhh
abdD
[root@zhaocheng ~]# grep "a[[:lower:]]\{2\}" test4
afghj9gh
abcd
apooo
aiuhh
abdD
[root@zhaocheng ~]# grep "a[A-Z]\{2\}" test4
aBDc
[root@zhaocheng ~]# grep "a[[:upper:]]\{2\}" test4
aBDc

另外還有一個(gè)任意字符也就是[[:alpha:]]它和[a-zA-Z]意思一樣

[root@zhaocheng ~]# grep "[[:alpha:]]" test4
a
a9o
afghj9gh
abcd
apooo
aiuhh
aBDc
abdD
a124
a1a4
a%
[root@zhaocheng ~]# grep "[a-zA-Z]" test4
a
a9o
afghj9gh
abcd
apooo
aiuhh
aBDc
abdD
a124
a1a4
a%


同理[0-9]和[[:digit:]]等效,都表示0-9之間任意單個(gè)數(shù)字

[root@zhaocheng ~]# grep "[[:digit:]]" test4
a9o
afghj9gh
a124
a1a4
[root@zhaocheng ~]# grep "[0-9]" test4
a9o
afghj9gh
a124
a1a4


這個(gè)中間的[a-z]也就是所有的小寫字母,也可以匹配相關(guān)字符

[root@zhaocheng ~]# grep "b[ad]" test5
ba
bd

也可以匹配特殊字符,[ ]表示匹配指定范圍內(nèi)的任意單個(gè)字符

[root@zhaocheng ~]# grep "b[cP@*&]" test5
bc
bP
b&
b*
b@

過濾除了這些符號之外的字符

[root@zhaocheng ~]# grep "b[^cP@*&]" test5
ba
bd
bf
bg

使用[^a-z]排除這個(gè)以外的字符

[root@zhaocheng ~]# grep "b[^A-Z]" test5
ba
bc
bd
bf
bg
b&
b*
b@
[root@zhaocheng ~]# grep "b[^a-z]" test5
bP
b&
b*
b@

同理
[^a-z]表示非小寫字母的單個(gè)字符可以被匹配到
[^A-Z]表示非大寫字母的單個(gè)字符可以被匹配到
[^a-zA-Z]表示非字母的單個(gè)字符可以被匹配到,比如數(shù)字或符號
[^a-zA-Z0-9]表示非字母、非數(shù)字的單個(gè)字符可以被匹配到,比如符號

前面試到[a-z]和[[:lower:]]等效那么在^中也是等效的

[root@zhaocheng ~]# grep "b[^[:lower:]]" test5
bP
b&
b*
b@

也就是[^0-9]和[^[:digit:]]等效
[^a-z]和[^[:lower:]等效
[^A-Z]和[^[:upper:]]等效
[^a-zA-Z]和[^[:alpha:]等效
[^a-zA-Z0-9]和[^[:alnum:]等效

除了[0-9], [[:digit:]]可以表示數(shù)字,而且還可以使用\d來表示數(shù)字

[root@zhaocheng ~]# grep -P "b\d" test5
b3
b4
b5


顯示任意單個(gè)非數(shù)字字符

[root@zhaocheng ~]# grep -P "b\D" test5
ba
bc
bd
bf
bg
bP
b&
b*
b@

\d表示任意單個(gè)0-9的數(shù)字
\D表示任意單個(gè)非數(shù)字字符
\t表示匹配單個(gè)橫向制表符(相當(dāng)于一個(gè)tab?。?br/>\s表示匹配單個(gè)空白字符,包括空格,tab制表符等
\S表示匹配單個(gè)非空白字符

四、正則表達(dá)式 轉(zhuǎn)義符

常用符號"\",轉(zhuǎn)義符
之前我們用到了.正則代表匹配后面任意字符,但是如果這個(gè)文本中就有這個(gè)點(diǎn),直接匹配的話,也會匹配到其他的,這里我們就需要使用轉(zhuǎn)義符\來匹配

[root@zhaocheng ~]# grep "a.." test4
a9o
afghj9gh
abcd
apooo
aiuhh
aBDc
abdD
a124
a1a4
a..

[root@zhaocheng ~]# grep "a\.\." test4
a..

如果想匹配反斜杠本身的話
可以使用''單引號來進(jìn)行匹配,'\'匹配一個(gè)

[root@zhaocheng ~]# grep 'a\\' test4
a\\\
[root@zhaocheng ~]# grep 'a\\\\' test4
a\\\
[root@zhaocheng ~]# grep 'a\\\\\\' test4
a\\\

五、正則表達(dá)式小結(jié)

#################常用符號#################
. 表示任意單個(gè)字符。

  • 表示前面的字符連續(xù)出現(xiàn)任意次,包括0次。
    . 表示任意長度的任意字符,與通配符中的的意思相同。
    \ 表示轉(zhuǎn)義符,當(dāng)與正則表達(dá)式中的符號結(jié)合時(shí)表示符號本身。
    [ ]表示匹配指定范圍內(nèi)的任意單個(gè)字符。
    [^ ]表示匹配指定范圍外的任意單個(gè)字符。

#################單個(gè)字符匹配相關(guān)#################
[[:alpha:]] 表示任意大小寫字母。
[[:lower:]] 表示任意小寫字母。
[[:upper:]] 表示任意大寫字母。
[[:digit:]] 表示0到9之間的任意單個(gè)數(shù)字(包括0和9)。
[[:alnum:]] 表示任意數(shù)字或字母。
[[:space:]] 表示任意空白字符,包括"空格"、"tab鍵"等。
[[:punct:]] 表示任意標(biāo)點(diǎn)符號。
[^[:alpha:]] 表示單個(gè)非字母字符。
[^[:lower:]] 表示單個(gè)非小寫字母字符。
[^[:upper:]] 表示單個(gè)非大寫字母字符。
[^[:digit:]] 表示單個(gè)非數(shù)字字符。
[^[:alnum:]] 表示單個(gè)非數(shù)字非字母字符。
[^[:space:]] 表示單個(gè)非空白字符。
[^[:punct:]] 表示單個(gè)非標(biāo)點(diǎn)符號字符。
[0-9]與[[:digit:]]等效。
[a-z]與[[:lower:]]等效。
[A-Z]與[[:upper:]]等效。
[a-zA-Z]與[[:alpha:]]等效。
[a-zA-Z0-9]與[[:alnum:]]等效。
[^0-9]與[^[:digit:]]等效。
[^a-z]與[^[:lower:]]等效。
[^A-Z]與[^[:upper:]]等效
[^a-zA-Z]與[^[:alpha:]]等效
[^a-zA-Z0-9]與[^[:alnum:]]等效
#簡短格式并非所有正則表達(dá)式解析器都可以識別。
\d 表示任意單個(gè)0到9的數(shù)字。
\D 表示任意單個(gè)非數(shù)字字符。
\t 表示匹配單個(gè)橫向制表符(相當(dāng)于一個(gè)tab鍵)。
\s表示匹配單個(gè)空白字符,包括"空格","tab制表符"等。
\S表示匹配單個(gè)非空白字符。

#################次數(shù)匹配相關(guān)#################
\? 表示匹配其前面的字符0或1次
+ 表示匹配其前面的字符至少1次,或者連續(xù)多次,連續(xù)次數(shù)上不封頂。
{n} 表示前面的字符連續(xù)出現(xiàn)n次,將會被匹配到。
{x,y} 表示之前的字符至少連續(xù)出現(xiàn)x次,最多連續(xù)出現(xiàn)y次,都能被匹配到,換句話說,只要之前的字符連續(xù)出現(xiàn)的次數(shù)在x與y之間,即可被匹配到。
{,n} 表示之前的字符連續(xù)出現(xiàn)至多n次,最少0次,都會陪匹配到。
{n,}表示之前的字符連續(xù)出現(xiàn)至少n次,才會被匹配到。

#################位置邊界匹配相關(guān)#################
^:表示錨定行首,此字符后面的任意內(nèi)容必須出現(xiàn)在行首,才能匹配。
$:表示錨定行尾,此字符前面的任意內(nèi)容必須出現(xiàn)在行尾,才能匹配。
^$:表示匹配空行,這里所描述的空行表示"回車",而"空格"或"tab"等都不能算作此處所描述的空行。
^abc$:表示abc獨(dú)占一行時(shí),會被匹配到。
\<或者\(yùn)b :匹配單詞邊界,表示錨定詞首,其后面的字符必須作為單詞首部出現(xiàn)。
\>或者\(yùn)b :匹配單詞邊界,表示錨定詞尾,其前面的字符必須作為單詞尾部出現(xiàn)。
\B:匹配非單詞邊界,與\b正好相反。

#################分組與后向引用#################
( ) 表示分組,我們可以將其中的內(nèi)容當(dāng)做一個(gè)整體,分組可以嵌套。
(ab) 表示將ab當(dāng)做一個(gè)整體去處理。
\1 表示引用整個(gè)表達(dá)式中第1個(gè)分組中的正則匹配到的結(jié)果。
\2 表示引用整個(gè)表達(dá)式中第2個(gè)分組中的正則匹配到的結(jié)果。

[root@zhaocheng ~]# cat shengri.txt 
小卡  19901119
小紅  19920105
小里  19930211
小會  19940325
小黑  19950418
匹配1993開頭的
[root@zhaocheng ~]# grep "\b1993[0-9]\{4\}\b" shengri.txt 
小里  19930211

這里意思\<1992,\b1992都是固定詞首,[[:digit:]]和[0-9]都可以表示數(shù)字,{4}后面4個(gè)的字母結(jié)尾\>,\b都是固定詞尾

[root@zhaocheng ~]# grep "\<1992[[:digit:]]\{4\}\>" shengri.txt 
小紅  19920105
[root@zhaocheng ~]# grep "\<1992[[:digit:]]\{4\}\b" shengri.txt 
小紅  19920105
[root@zhaocheng ~]# grep "\b1992[[:digit:]]\{4\}\b" shengri.txt 
小紅  19920105
[root@zhaocheng ~]# grep "\b1992[[:digit:]]\{4\}\>" shengri.txt 
小紅  19920105

六、擴(kuò)展正則表達(dá)式

不管是在基本正則表達(dá)式中還是擴(kuò)展正則表達(dá)式中,有的通用的符號所表達(dá)的意思是相同的
. 表示任意單個(gè)字符。

  • 表示前面的字符連續(xù)出現(xiàn)任意次,包括0次。
    . 表示任意長度的任意字符,與通配符中的的意思相同。
    \ 表示轉(zhuǎn)義符,當(dāng)與正則表達(dá)式中的符號結(jié)合時(shí)表示符號本身。
    [ ]表示匹配指定范圍內(nèi)的任意單個(gè)字符。
    [^ ]表示匹配指定范圍外的任意單個(gè)字符。

[[:alpha:]] 表示任意大小寫字母。
[[:lower:]] 表示任意小寫字母。
[[:upper:]] 表示任意大寫字母。
[[:digit:]] 表示0到9之間的任意單個(gè)數(shù)字(包括0和9)。
[[:alnum:]] 表示任意數(shù)字或字母。
[[:space:]] 表示任意空白字符,包括"空格"、"tab鍵"等。
[[:punct:]] 表示任意標(biāo)點(diǎn)符號。
[^[:alpha:]] 表示單個(gè)非字母字符。
[^[:lower:]] 表示單個(gè)非小寫字母字符。
[^[:upper:]] 表示單個(gè)非大寫字母字符。
[^[:digit:]] 表示單個(gè)非數(shù)字字符。
[^[:alnum:]] 表示單個(gè)非數(shù)字非字母字符。
[^[:space:]] 表示單個(gè)非空白字符。
[^[:punct:]] 表示單個(gè)非標(biāo)點(diǎn)符號字符。
[0-9]與[[:digit:]]等效。
[a-z]與[[:lower:]]等效。
[A-Z]與[[:upper:]]等效。
[a-zA-Z]與[[:alpha:]]等效。
[a-zA-Z0-9]與[[:alnum:]]等效。
[^0-9]與[^[:digit:]]等效。
[^a-z]與[^[:lower:]]等效。
[^A-Z]與[^[:upper:]]等效
[^a-zA-Z]與[^[:alpha:]]等效
[^a-zA-Z0-9]與[^[:alnum:]]等效

^:表示錨定行首,此字符后面的任意內(nèi)容必須出現(xiàn)在行首,才能匹配。
$:表示錨定行尾,此字符前面的任意內(nèi)容必須出現(xiàn)在行尾,才能匹配。
^$:表示匹配空行,這里所描述的空行表示"回車",而"空格"或"tab"等都不能算作此處所描述的空行。
^abc$:表示abc獨(dú)占一行時(shí),會被匹配到。
\<或者\(yùn)b :匹配單詞邊界,表示錨定詞首,其后面的字符必須作為單詞首部出現(xiàn)。
\>或者\(yùn)b :匹配單詞邊界,表示錨定詞尾,其前面的字符必須作為單詞尾部出現(xiàn)。
\B:匹配非單詞邊界,與\b正好相反。

grep命令默認(rèn)只支持基本正則表達(dá)式,如果想讓grep支持?jǐn)U展正則表達(dá)式,則需要使用-E選項(xiàng),不過這些70%都是通用的符號,查看效果

[root@zhaocheng ~]# grep "b[a-z]" test5
ba
bc
bd
[root@zhaocheng ~]# egrep "b[a-z]" test5
ba
bc
bd
[root@zhaocheng ~]# grep -E "b[a-z]" test5
ba
bc
bd

另外的30%的與基本正則表達(dá)式相比,稍微不同一些,不過看起來比正則還要好理解
在正則表達(dá)式中{n}表示前面的字符連續(xù)出現(xiàn)n次,將會被匹配到
在擴(kuò)展正則表達(dá)式中,{n}表示前面的字符連續(xù)出現(xiàn)n次,將會匹配到

在基本正則表達(dá)式中,( )表示分組,(ab)表示將ab當(dāng)作一個(gè)整體去處理
在擴(kuò)展正則表達(dá)式中,( )表示分組,(ab)表示將ab當(dāng)作一個(gè)整體去處理

在擴(kuò)展正則表達(dá)式中:
()表示分組
(ab) 表示將ab當(dāng)作一個(gè)整體去處理
\1 表示引用整個(gè)表達(dá)式中第一個(gè)分組的正則匹配到的結(jié)果
\2 表示引用整個(gè)表達(dá)式中第二個(gè)分組的正則匹配到的結(jié)果
? 表示匹配其前面的字符0或1次

  • 表示匹配其前面的字符至少1次,或者連續(xù)多次,連續(xù)次數(shù)上不封頂
    {n} 表示前面的字符連續(xù)出現(xiàn)n次,將會匹配到
    {x,y}表示之前的字符至少連續(xù)出現(xiàn)x次,最多連續(xù)出現(xiàn)y次,都能匹配到
    {,n} 表示之前的字符連續(xù)出現(xiàn)至多n次,最少0次,都會匹配到
    {n,}表示之前的字符連續(xù)出現(xiàn)至少n次,才會匹配到

在擴(kuò)展表達(dá)式中,還有一個(gè)比較常用的符號,是基本正則表達(dá)式中沒有的,它就是“|”

它的意思是表示或

[root@zhaocheng ~]# cat test6
kubernetes.com
jenkins.com
rabbitmq.com
zookpeer.com
spring boot.com
dubbo.edu
spring cloud.net
helm.org

找出以.net結(jié)尾的行,xxx$以什么為結(jié)尾

[root@zhaocheng ~]# grep "net$" test6
spring cloud.net
[root@zhaocheng ~]# egrep "net$" test6
spring cloud.net
[root@zhaocheng ~]# grep -E "net$" test6
spring cloud.net

比如找出以com,net一樣結(jié)尾的行就可以使用"|",可以使用egrep或者grep -E,()表示將括號內(nèi)的內(nèi)容看作一個(gè)整體,


[root@zhaocheng ~]# egrep "(com|net)$" test6
kubernetes.com
jenkins.com
rabbitmq.com
zookpeer.com
spring boot.com
spring cloud.net
[root@zhaocheng ~]# grep -E "(com|net)$" test6
kubernetes.com
jenkins.com
rabbitmq.com
zookpeer.com
spring boot.com
spring cloud.net

也可以這么寫,不過沒有(com|net)$精確,$這個(gè)是以什么結(jié)尾

[root@zhaocheng ~]# grep -E "com|net" test6
kubernetes.com
jenkins.com
rabbitmq.com
zookpeer.com
spring boot.com
spring cloud.net

常用擴(kuò)展表達(dá)式小結(jié)
常用符號
. 表示任意單個(gè)字符。

  • 表示前面的字符連續(xù)出現(xiàn)任意次,包括0次。
    . 表示任意長度的任意字符,與通配符中的的意思相同。
    \ 表示轉(zhuǎn)義符,當(dāng)與正則表達(dá)式中的符號結(jié)合時(shí)表示符號本身。
    | 表示"或者"之意
    [ ]表示匹配指定范圍內(nèi)的任意單個(gè)字符。
    [^ ]表示匹配指定范圍外的任意單個(gè)字符。

單個(gè)字符匹配相關(guān)
[[:alpha:]] 表示任意大小寫字母。
[[:lower:]] 表示任意小寫字母。
[[:upper:]] 表示任意大寫字母。
[[:digit:]] 表示0到9之間的任意單個(gè)數(shù)字(包括0和9)。
[[:alnum:]] 表示任意數(shù)字或字母。
[[:space:]] 表示任意空白字符,包括"空格"、"tab鍵"等。
[[:punct:]] 表示任意標(biāo)點(diǎn)符號。
[^[:alpha:]] 表示單個(gè)非字母字符。
[^[:lower:]] 表示單個(gè)非小寫字母字符。
[^[:upper:]] 表示單個(gè)非大寫字母字符。
[^[:digit:]] 表示單個(gè)非數(shù)字字符。
[^[:alnum:]] 表示單個(gè)非數(shù)字非字母字符。
[^[:space:]] 表示單個(gè)非空白字符。
[^[:punct:]] 表示單個(gè)非標(biāo)點(diǎn)符號字符。
[0-9]與[[:digit:]]等效。
[a-z]與[[:lower:]]等效。
[A-Z]與[[:upper:]]等效。
[a-zA-Z]與[[:alpha:]]等效。
[a-zA-Z0-9]與[[:alnum:]]等效。
[^0-9]與[^[:digit:]]等效。
[^a-z]與[^[:lower:]]等效。
[^A-Z]與[^[:upper:]]等效
[^a-zA-Z]與[^[:alpha:]]等效
[^a-zA-Z0-9]與[^[:alnum:]]等效

次數(shù)匹配相關(guān)
? 表示匹配其前面的字符0或1次

  • 表示匹配其前面的字符至少1次,或者連續(xù)多次,連續(xù)次數(shù)上不封頂。
    {n} 表示前面的字符連續(xù)出現(xiàn)n次,將會被匹配到。
    {x,y} 表示之前的字符至少連續(xù)出現(xiàn)x次,最多連續(xù)出現(xiàn)y次,都能被匹配到,換句話說,只要之前的字符連續(xù)出現(xiàn)的次數(shù)在x與y之間,即可被匹配到。
    {,n} 表示之前的字符連續(xù)出現(xiàn)至多n次,最少0次,都會陪匹配到。
    {n,}表示之前的字符連續(xù)出現(xiàn)至少n次,才會被匹配到。

位置邊界匹配相關(guān)
^:表示錨定行首,此字符后面的任意內(nèi)容必須出現(xiàn)在行首,才能匹配。
$:表示錨定行尾,此字符前面的任意內(nèi)容必須出現(xiàn)在行尾,才能匹配。
^$:表示匹配空行,這里所描述的空行表示"回車",而"空格"或"tab"等都不能算作此處所描述的空行。
^abc$:表示abc獨(dú)占一行時(shí),會被匹配到。
\<或者\(yùn)b :匹配單詞邊界,表示錨定詞首,其后面的字符必須作為單詞首部出現(xiàn)。
\>或者\(yùn)b :匹配單詞邊界,表示錨定詞尾,其前面的字符必須作為單詞尾部出現(xiàn)。
\B:匹配非單詞邊界,與\b正好相反。

分組與后向引用
( ) 表示分組,我們可以將其中的內(nèi)容當(dāng)做一個(gè)整體,分組可以嵌套。
(ab) 表示將ab當(dāng)做一個(gè)整體去處理。
\1 表示引用整個(gè)表達(dá)式中第1個(gè)分組中的正則匹配到的結(jié)果。
\2 表示引用整個(gè)表達(dá)式中第2個(gè)分組中的正則匹配到的結(jié)果。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI