正則表達式的簡單梳理


    這篇博文我們按照每一種正則表達式符號來整理。

1)行首定位符“^”:匹配行首的字符

#-----------------------------/chapter8/ex8-2.sh------------------
#! /bin/bash

#列出/etc目錄中的以字母po開頭的文件
str=`ls /etc | grep "^po"`
echo "$str"

注意:str變量的賦值,即等號右邊需要有反引號;其中用到了管道命令,grep命令處理對象是前面ls的結果,不然grep後面要接被處理文件名;正則表達式要用雙引號""括起來,在awk、sed中是用兩條反斜槓\...\括起來。


2)行尾定位符"$":匹配行尾的字符

#-----------------------------/chapter8/ex8-3.sh------------------
#! /bin/bash

#列出/etc目錄中以conf結尾的文件名
str=`ls /etc | grep "conf$"`

echo "$str"

3)匹配整行:"^一整行內容$"


4)單個字符匹配".":可以代表任意字符,包括空格,不包括換行符\n

#-----------------------------/chapter8/ex8-4.sh------------------
#! /bin/bash

#列出所有的包含字符串“samba”的文件名
str=`ls /etc | grep "samba"`

echo "$str"

echo "==============================="

#列出包含字符串samba以及另外一個字符的文件名
str=`ls /etc | grep "samba."`

echo "$str"

注意:有了"."就表示一定有個字符在這兒,也可以用多個"."表示多個字符存在,例如"l..p"。


5)限定符"*":重複其前面的字符0次或者多次

#-----------------------------/chapter8/ex8-5.sh------------------
#! /bin/bash

#篩選出以字符s開頭,緊跟着1個字符s,任意個字符s的文件名
str=`ls /etc | grep "^sss*"`

echo "$str"

注意:可以表達重複0次;正則表達式的*和linux shell中的*不一樣,那個是表示匹配任意字符(串),不一定要是重複前面的字符,可以說範圍更廣。


6)字符集匹配“[]”:匹配中括號中的任意一個字符即可

#-----------------------------/chapter8/ex8-6.sh------------------
#! /bin/bash

#篩選所有以字符r開頭,並且緊跟着1個字符c的文本行
str=`ls /etc |grep "^rc"`

echo "$str"<pre name="code" class="plain">#-----------------------------/chapter8/ex8-7.sh------------------
#! /bin/bash

#篩選以字符串“ss”開頭,後面至少緊跟着1個字符“s”的文本行
str=`ls /etc | egrep "^sss+"`

echo "$str"



注意:[a-z]匹配小寫字母,[A-Z]匹配大寫字母,[a-zA-Z]匹配字母,[0-9]匹配數字。

          當元字符“*”和 “.”在"[]"內時,只能表示一個普通的字符,沒有上面的特殊含義了。


7)字符集不匹配“[^]”:功能和上面正好相反


8)限定符“+”:功能類似於"*",但是重複前面字符的次數必須大於等於1次,不能是0次

#-----------------------------/chapter8/ex8-7.sh------------------
#! /bin/bash

#篩選以字符串“ss”開頭,後面至少緊跟着1個字符“s”的文本行
str=`ls /etc | egrep "^sss+"`

echo "$str"

9)限定符“?”:功能類似於“*”,但是重複其那面字符的次數必須只能是0次或1次

#-----------------------------/chapter8/ex8-8.sh------------------
#! /bin/bash

#篩選以字符串“ss”開頭,後面跟着0或者1個s的文本行
str=`ls /etc | egrep "^sss?"`

echo "$str"


10)豎線"|"和圓括號"()":多個正則表示之間的或的關係

#-----------------------------/chapter8/ex8-9.sh------------------
#! /bin/bash

#篩選含有字符串“ssh”、“ssl”或者以字符串“yum”開頭的文本行
str=`ls /etc | egrep "(ssh|ssl|^yum)"`

echo "$str"

11)"{m, n}"、"{m}"、"{m,}":指定重複出現的次數

前面的限定符"*", "+", "?"都可以重複前面的字符不同的次數,但是重複出現的次數都不可控。我們使用"{m, n}"、"{m}"、"{m,}"就可以控制重複出現的次數。

"{m, n}":前置字符最少出現m次,最多出現n次;

"{m}":前置字符出現m次;

"{m,}":前置字符最少出現m次。

如果重複的字符不是唯一的呢?這時可以和中括號字符集匹配"[]"結合使用,如下:

#-----------------------------/chapter8/ex8-16.sh------------------
#! /bin/bash

#篩選符合格式的電話號碼
str=`egrep "800-[[:digit:]]{3}-[[:digit:]]{4}$" demo4.txt`

echo "$str"

注意:在普通正則表達式中沒有對{}的定義,需要加轉義字符:\{m, n\}。


12)POSIX字符集可以方便表示"[]"的字符集


注意:使用POSIX字符集時需要兩層中括號。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章