我們知道c的變數和shell指令碼變數的定義和使用方法很不相同,表達能力也不相同,c的變數有各種型別,而shell指令碼變數都是字串。同樣道理,各種工具和程式語言所使用的正規表示式規範的語法並不相同,表達能力也各不相同,有的正規表示式規範引入很多擴充套件,能表達更複雜的模式,但各種正規表示式規範的基本概念都是相通的。本節介紹egrep(1)
所使用的正規表示式,它大致上符合posix正規表示式規範,詳見regex(7)
(看這個man page對你的英文絕對是很好的鍛鍊)。希望讀者仿照上一節的例子,一邊學習語法,一邊用egrep
命令做實驗。
表 32.1. 字元類
字元含義
舉例.
匹配任意乙個字元
abc.
可以匹配abcd
、abc9
等
匹配括號中的任意乙個字元
[abc]d
可以匹配ad
、bd
或cd
-
在括號內表示字元範圍
[0-9a-fa-f]
可以匹配一位十六進製制數字
^
位於括號內的開頭,匹配除括號中的字元之外的任意乙個字元
[^xy]
匹配除xy
之外的任一字元,因此[^xy]1
可以匹配a1
、b1
但不匹配x1
、y1
[[:***:]]
grep
工具預定義的一些命名字元類
[[:alpha:]]
匹配乙個字母,[[:digit:]]
匹配乙個數字
表 32.2. 數量限定符
字元含義
舉例?
緊跟在它前面的單元應匹配零次或一次
[0-9]?/.[0-9]
匹配0.0
、2.3
、.5
等,由於.
在正規表示式中是乙個特殊字元,所以需要用/
轉義一下,取字面值
+
緊跟在它前面的單元應匹配一次或多次
[a-za-z0-9_.-]+@[a-za-z0-9_.-]+/.[a-za-z0-9_.-]+
匹配email位址
*
緊跟在它前面的單元應匹配零次或多次
[0-9][0-9]*
匹配至少一位數字,等價於[0-9]+
,[a-za-z_]+[a-za-z_0-9]*
匹配c語言的識別符號
緊跟在它前面的單元應精確匹配n次
[1-9][0-9]
匹配從100
到999
的整數
緊跟在它前面的單元應匹配至少
n
次
[1-9][0-9]
匹配三位以上(含三位)的整數
緊跟在它前面的單元應匹配最多
m
次
[0-9]
相當於[0-9]?
緊跟在它前面的單元應匹配至少
n
次,最多m
次
[0-9]/.[0-9]/.[0-9]/.[0-9]
匹配ip位址
再次注意grep
找的是包含某一模式的行,而不是完全匹配某一模式的行。再舉個例子,如果文字檔案的內容是
aaabc查詢aadefg
a*
這個模式的結果是三行都被找出來了
$ egrep 'a*' testfileaabc
aadefg
a*
匹配0個或多個a
,而第三行包含0個a
,所以也包含了這一模式。單獨用a*
這樣的正規表示式做查詢沒什麼意義,一般是把a*
作為正規表示式的一部分來用。
表 32.3. 位置限定符
字元含義
舉例^
匹配行首的位置
^content
匹配位於一行開頭的content
$
匹配行末的位置
;$
匹配位於一行結尾的;
號,^$
匹配空行
/<
匹配單詞開頭的位置
/
/>匹配單詞結尾的位置
p/>
匹配leap ...
,但不匹配parent
、sleepy
/b
匹配單詞開頭或結尾的位置
/bat/b
匹配... at ...
,但不匹配cat
、atexit
、batch
/b
匹配非單詞開頭和結尾的位置
/bat/b
匹配battery
,但不匹配... attend
、hat ...
位置限定符可以幫助grep
更準確地查詢,例如上一節我們用[0-9]/.[0-9]/.[0-9]/.[0-9]
查詢ip位址,找到這兩行
192.168.1.1如果用1234.234.04.5678
^[0-9]/.[0-9]/.[0-9]/.[0-9]$
查詢,就可以把1234.234.04.5678
這一行過濾掉了。
表 32.4. 其它特殊字元
字元含義
舉例/
轉義字元,普通字元轉義為特殊字元,特殊字元轉義為普通字元
普通字元<
寫成/<
表示單詞開頭的位置,特殊字元.
寫成/.
以及/
寫成//
就當作普通字元來匹配
()
將正規表示式的一部分括起來組成乙個單元,可以對整個單元使用數量限定符
([0-9]/.)[0-9]
匹配ip位址
|
連線兩個子表示式,表示或的關係
n(o|either)
匹配no
或neither
以上介紹的是grep
正規表示式的extended規範,basic規範也有這些語法,只是字元?+{}|()
應解釋為普通字元,要表示上述特殊含義則需要加/
轉義。如果用grep
而不是egrep
,並且不加-e
引數,則應該遵照basic規範來寫正規表示式。
正規表示式基本語法
表示任意文字 表示任意單個字元 脫字符號 表示一行的開始 表示一行的結束 表示範圍。如 先是行開頭,然後是行結尾 表示空行 i 表示忽略大小寫 表示可選元素 量詞 表示之前緊鄰的元素出現一次或者多次 量詞 表示之前緊鄰的元素出現任意次數,或者不出現 量詞 表示盡可能匹配多的次數,如果無法完成匹配也不...
正規表示式基本語法
參考文章 1 基本語法 特殊符號 和 作用是分別指出乙個字串的開始和結束。the 表示所有以 the 開始的字串 there the cat 等 of despair 表示所以以 of despair 結尾的字串 abc 表示開始和結尾都是 abc 的字串 呵呵,只有 abc 自己了 notice ...
正規表示式基本語法
1.元字元介紹 匹配行或者字串的起始位置 匹配行或字串的結尾 w 匹配字母,數字,下劃線.d 匹配數字 匹配除了換行符以外的任何字元 abc 匹配包含括號內元素的字元 2.反義 w 匹配任意不是字母,數字,下劃線 的字元 s 匹配任意不是空白符的字元 d 匹配任意非數字的字元 b 匹配不是單詞開頭或...