Linux學習11 正規表示式

2021-08-22 12:10:57 字數 3627 閱讀 7394

正規表示式是一種描述文字字串或模式的方式,這樣程式就可以將該模式與任意文字字串相匹配,提供非常強大的搜尋能力。

grep、sed、awk 、vim、less、nginx、varnish等

正規表示式是從字元和運算構建的,並通過元字元來擴充,大部分字元都匹配自己,大部分元字元必須使用反斜槓\來轉義。使用正則表達法時,需要留意一下語系,因為不同語系的編碼資料不同,我們常用的是lang=c。

普通字元

字母、數字、下劃線以及沒有特殊定義的符號,都是普通字元,表示式中的普通字元,在匹配乙個字串的時候,匹配與之相同的乙個字元

例1:表示式「c」,在匹配字串「zbcde」時,匹配結果為』c』

•字元匹配

符號含義.

匹配任意單個字元

[ ]匹配指定範圍內的任意單個字元

[^]匹配指定範圍外的任意單個字元

[:alnum:]

字母和數字

[:alpha:]

代表任何英文大小寫字元,即a-z,a-z

[:lower:]

小寫字母

[:upper:]

大寫字母

[:blank:]

空白字元(空格和製表符)

[:space:]

水平和垂直的空白字

[:cntrl:]

不可列印的控制字元(退格、刪除、警鈴)

[:digit:]

十進位制數字

[:xdigit:]

十六進製制數字

[:graph:]

可列印的非空白字元

[:print:]

可列印字元

[:punct:]

標點符號

字元轉義

一些不便書寫的字元,採用在前面加『\『的方法

表示式可匹配

\r,\n

代表回車和換行

\t製表符

\代表\

還有一些有特殊用處的符號,在前面加』\』後,就代表該符號本身。比如:^,$,.等,這些轉義字元的匹配方法與普通字串類似,匹配與之相同的乙個字元。

表示式可匹配

^^本身

$$本身

..本身

自定義能夠匹配「多種字元」的表示式

使用中括號包含一系列字元,能夠匹配其中任意乙個字元。用[^]包含一系列字元,則能匹配其中字元之外的任意乙個字元。

表示式可匹配

[abc]

a或b或c

[^abc]

a、b、c之外的任意乙個字元

[^a-f0-3]

a-f,0-3之外的任意字元

•匹配次數(重複)

使用表示式再加上修飾匹配次數的特殊符號,就不用重複書寫表示式就可以重複匹配。

符號含義

*匹配前面的字元任意次包括0次

.*任意長度的任意字元

?匹配其前面的字元0或1次

+匹配前面的字元至少1次

匹配前面的字元至少m次,至多n次

匹配前面的字元n次

匹配前面的字元至多n次

匹配前面的字元至少n次

例2:a*b這樣的表示式將匹配任何在a後以b結尾的字串,包括b本身(0個a後跟b的字串)

最後一串字元表達的意思為[0-9]任意字元出現{1-3}次加「.」,連續出現3次\,最後再接乙個不帶點的第一段字元

[root@v9centos7 ~]$ifconfig ens33|grep -w inet|grep -eo '([0-9]\.)[0-9]'

172.16.253.231

255.255.0.0

172.16.255.255

位置錨定:定位出現的位置

符號含義^

行首錨定,用於模式的最左側

$行尾錨定,用於模式的最右側

^pattern$

用於模式匹配整行

^$空行1*$

空白行\《或\b

詞首錨定,用於單詞模式的左側

\>或\b

詞尾錨定,用於單詞模式的右側

\匹配整個單詞

例題4:取出光碟目錄packages目錄中以.rpm結尾的檔案,並統計前面的一段字串,出現次數並統計

ls /misc/cd/packages/|grep -o'[^.]\+\.rpm$'|sort|uniq -c

ps:/misc為光碟臨時掛載點,利用行尾錨定,來篩選題目要求

例題5:過濾掉檔案f1空行,包括帶空格以及tab的

[root@v9centos7 /data]$cat -a f1

abc cba$

$help $

^i^i$

usb^i$

$[root@v9centos7 /data]$grep -v '^[[:space:]]*$' f1

abc cba

help

usb

分組:

\(\)將乙個或多個字元**在一起,當做乙個整體進行處理

'([0-9]\.)[0-9]'

後項引用

分組括號中的模式匹配到的內容會被正規表示式引擎記錄於內部變數中,這些變數命名方式為:\1,\2,\3…

\1表示從左側起第乙個左括號以及與之匹配右括號之間的模式所匹配的字元

例題:\1匹配的是前面\(r..\)的最終結果,例如例子中匹配到的roo,後面的\1也將匹配roo,而不是r..

echo "aa roo xx ryy"|grep "\<\(r..\).*\1"匹配不到

echo "aa roo xx roo"|grep "\<\(r..\).*\1"匹配成功

aa roo xx roo匹配到的結果

##5.擴充套件正規表示式

擴充套件正規表示式消除了像在基本語法中使用時一樣轉義一些字元的需要,包括()、?、+、|{}。

缺點是如果想在正規表示式中將他們解釋為字元,則必須轉義他們,我們可以使用grep -e或者egrep來指定在使用的是擴充套件正規表示式

##6.或的表示方法

使用符號 | 將需要選擇的模式隔開

例題:匹配檔案f1中的xyzab或xyzdf或xyzef。

[root@v9centos7 /data]$grep -o "xyz\ab\|cd\|ef" f1

xyzab cd ef

[root@v9centos7 /data]$grep "xyz\(ab\|cd\|ef\)" f1

xyzab xyzcd xyzef

[root@v9centos7 /data]$cat f1

xyzab xyzcd xyzef

##7.貪婪與懶惰

當正規表示式包含能接受重複的符號時,通常是盡可能多的匹配字元。

例:a.*b,用它來搜尋aababaaab,

它會匹配整個字串。

[:space:] ↩︎

linux學習筆記 11 正規表示式

grep hadoop etc passwd cut d f7 du sort n grep v hadoop etc passwd grep hadoop etc passwd grep h.p etc passwd grep hadoop etc passwd grep hadoop etc p...

11 正規表示式

注意 任何預定義字元沒有加上數量詞之前只能匹配乙個字元。12 matches d d 這裡匹配了兩個 注意 這裡只匹配乙個 匹配 matches 匹配qq號 string qq 123456 string reg 1 9 0 9 boolean b qq.matches req 匹配手機號碼 str...

正規表示式 學習筆記1 1

正規表示式 學習筆記一 徒弟 師傅呀,我接到新任務,要過濾字串,進行篩選,乙個個對比,貌似好麻煩喲!師傅 都什麼年代啦,你的效率低不低呀?用正則吧,誰用誰知道好!1 什麼是正規表示式 在電腦科學中,是指乙個用來描述或者匹配一系列符合某個句法規則的字串的單個字串。在很多文字編輯器或其他工具裡,正規表示...