Shell學習 正規表示式

2021-10-10 06:26:36 字數 3757 閱讀 3679

定位符:同時錨定開頭和結尾,做精確匹配;單一錨定開頭或結尾或者不錨定的,做模糊匹配。

^ :錨定開頭 ^a 以a開頭 預設錨定乙個字元

$ :錨定結尾 a$ 以a結尾 預設錨定乙個字元

匹配符:匹配字串

. :匹配除回車以外的任意乙個字元

( ) :字串分組

[ ] :定義字元類,匹配括號中的乙個字元

[ ^ ] :表示否定括號**現字元類中的字元,取反。

\ :轉義字元

| : 或

e.g.

1)精確匹配  以a開頭c結尾  中間任意  長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a.c$" file

accabc

a_cazc

a ca3c

2)模糊匹配 以cc結尾的字串 因為$只能錨定單個字元,如果是乙個字串就需要用()來做定義

[root@zutuanxue ~]# egrep "(cc)$" file

abcc

aabbcc

accccc

3)精確匹配 以a開頭c結尾 中間是a-z,0-9 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[a-z0-9]c$" file

accabc

a3c4)精確匹配 以a開頭c結尾 中間不包含a-z,0-9 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[^a-z0-9]c$" file

a_cazc

a c5)精確匹配 以e開頭f結尾 中間是*號 長度為三個位元組的字串 e*f

[root@zutuanxue ~]# egrep "^e\*f$" file

e*f6)精確匹配 以a開頭b或c結尾 中間是任意 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a.(b|c)$" file

accabc

asba_c

azca c

a3c

限定符:對前面的字元或者(字串)出現的次數做限定說明

* :某個字元之後加星號表示該字元不出現或出現多次 a* (ab)*

?:與星號相似,但略有變化,表示該字元出現一次或不出現

+ :與星號相似,表示其前面字元出現一次或多次,但必須出現一次

:某個字元之後出現,表示該字元最少n次,最多m次

:正好出現了m次

e.g.

1)精確匹配 以a開頭 c結尾 中間是有b或者沒有b 長度不限的字串

[root@zutuanxue ~]# egrep "^ab*c$" file

acabbc

abbbc

abbbbbc

abc2)精確匹配 以a開頭 c結尾 中間只出現一次b或者沒有b的字串

[root@zutuanxue ~]# egrep "^ab?c$" file

acabc

3)精確匹配 以a開頭 c結尾 中間是有b且至少出現一次 長度不限的字串

[root@zutuanxue ~]# egrep "^ab+c$" file

abbc

abbbc

abbbbbc

abc4)精確匹配 以a開頭 c結尾 中間是有b且至少出現兩次最多出現四次 長度不限的字串

[root@zutuanxue ~]# egrep "^abc$" file

abbc

abbbc

5)精確匹配 以a開頭 c結尾 中間是有b且正好出現三次的字串

[root@zutuanxue ~]# egrep "^abc$" file

abbbc

6) 精確匹配 以a開頭 c結尾 中間是有b且至少出現一次的字串

[root@zutuanxue ~]# egrep "^abc$" file

abbc

abbbc

abbbbbc

abc

正規表示式posix字元:posix字元一次只匹配乙個範圍中的乙個位元組

[:alnum:] 匹配任意字母字元0-9 a-z a-z

[:alpha:] 匹配任意字母,大寫或小寫

[:digit:] 數字 0-9

[:graph:] 非空字元( 非空格控制字元)

[:lower:] 小寫字元a-z

[:upper:] 大寫字元a-z

[:cntrl:] 控制字元

[:print:] 非空字元( 包括空格)

[:punct:] 標點符號

[:blank:] 空格和tab字元

[:xdigit:] 16 進製數字

[:space:] 所有空白字元( 新行、空格、製表符)

e.g.

注意[[ ]]  雙中括號的意思:  第乙個中括號是匹配符 匹配中括號中的任意乙個字元,第二個是格式 如[:digit:]

1)精確匹配 以a開頭c結尾 中間a-za-z0-9任意字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:alnum:]]c$" file

accabc

azca3c

2)精確匹配 以a開頭c結尾 中間是a-za-z任意字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:alpha:]]c$" file

accabc

azc3)精確匹配 以a開頭c結尾 中間是0-9任意字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:digit:]]c$" file

a3c4)精確匹配 以a開頭c結尾 中間是a-z任意字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:lower:]]c$" file

accabc

4)精確匹配 以a開頭c結尾 中間是a-z任意字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:upper:]]c$" file

azc5)精確匹配 以a開頭c結尾 中間是非空任意字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:print:]]c$" file

accabc

a_cazc

a ca3c

6)精確匹配 以a開頭c結尾 中間是符號字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:punct:]]c$" file

a_c7)精確匹配 以a開頭c結尾 中間是空格或者tab符字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:blank:]]c$" file

a c類似

[root@zutuanxue ~]# egrep "^a[[:space:]]c$" file

a c8)精確匹配 以a開頭c結尾 中間是十六進製制字元 長度為三個位元組的字串

[root@zutuanxue ~]# egrep "^a[[:xdigit:]]c$" file

accabc

a3c

shell正規表示式

句點 匹配單字元 1 匹配任意單ascii 字元,可以為字母,或為數字。2 舉例 xc.匹配dexc1t 23xcdf 等,w.w.w.匹配rwxrw rw 行首以 匹配字串或字串行 1 允許在一行的開始匹配字元或單詞。2 舉例 01 匹配0011cx4 c01sdf 等,d 匹配drwxr xr ...

shell正規表示式

句點 匹配單字元 1 匹配任意單ascii 字元,可以為字母,或為數字。2 舉例 xc.匹配dexc1t 23xcdf 等,w.w.w.匹配rwxrw rw 行首以 匹配字串或字串行 1 允許在一行的開始匹配字元或單詞。2 舉例 01 匹配0011cx4 c01sdf 等,d 匹配drwxr xr ...

shell 正規表示式

一 從頭開始 echo the book sed n the p 二 結尾 三 聯合定位 this is a test 四 點字元 用於匹配除換行符之外的任何乙個單一字元 五 字元類 定義一類字元,用於匹配文字模式中的某一位置 例如 echo n ch at p data the cat is sl...