2013年6月6日 星期四

Regular Expressions- RE簡介(詮釋位元 ? + *)

量詞(quantifiers)
? (question mark):代表可以省略
color或colour  ==> colou?r
(July|Jul) (fourth|4th|4) ==> July? (fourth|4(th)?)

+ :代表緊鄰前面的項目出現一次或多次

*(asterisk) :代表緊鄰前面的項目出現任何次數(包含不出現)

...* :代表嘗試匹配越多次越好,但是有需要的話也可以完全沒有內容。
...+ :代表嘗試匹配越多次越好,但是他在不能至少匹配一次的情形下會失敗。
...? : 與...*很像,在正規表達式之內一定會成功,差異在於匹配的是那些文字。

。? :允許一個可省略的空白字元。
。* :允許任意數量的可省略空白字元。
註: 。指的是空白字元

至少需要    最多嘗試       意義
?                            1                 0~1次
*                            不限           0~∞次
+                            不限           1~∞次


定義匹配次數範圍:
......{下限,上限} (還沒幾個egrep版本支援這個寫法)
ex. {0,1} 跟 ? 一樣

2013年6月5日 星期三

Regular Expressions- RE簡介(忽略大小寫差異)

%egrep -i '^(From|Subject}Date): ' mailbox
-i 這不是GE的一部分,而許多工具都有提供的有用功能

2013年6月4日 星期二

Regular Expressions- RE簡介(選項)

|代表"或" :
 底下三個表達式,全部代表相同意思
Jeffrey|Jeffery
Jeff(rey|ery)
Jeff(re|er)y

 底下四個表達式,全部代表相同意思
(Geoff|Jeff)(rey|ery)
(Geo|Je)ff(rey|ery)
(Geo|Je)ff(re|er)y
Jeffrey|Geoffery|Jeffery|Geoffrey

^From|Subject|Date:. 與^(From|Subject|Date):.有非常大的差異
 ^(From|Subject|Date):. 他會匹配:
1. 行首From:.
2. 行首Subject:.
3. 行首Date:.


 [root@www mail]# egrep '^(From|Subject|Date): ' root
Date: Thu, 23 Aug 2012 10:38:12 +0800
From: logwatch@localhost.localdomain
Subject: Logwatch for www.eric.com.tw (Linux)
Date: Fri, 24 Aug 2012 10:21:47 +0800
From: logwatch@localhost.localdomain
Subject: Logwatch for www.eric.com.tw (Linux)
Date: Mon, 27 Aug 2012 10:11:18 +0800
From: logwatch@localhost.localdomain
Subject: Logwatch for www.eric.com.tw (Linux)
Date: Tue, 28 Aug 2012 10:20:02 +0800
From: logwatch@localhost.localdomain
Subject: Logwatch for www.eric.com.tw (Linux)
Date: Wed, 29 Aug 2012 14:15:20 +0800
From: logwatch@localhost.localdomain
Subject: Logwatch for www.eric.com.tw (Linux)
Date: Thu, 30 Aug 2012 16:50:30 +0800
From: logwatch@localhost.localdomain
Subject: Logwatch for www.eric.com.tw (Linux)
Date: Fri, 31 Aug 2012 14:27:30 +0800
From: logwatch@localhost.localdomain

Regular Expressions- RE簡介(字元類別)

^cat$
字面上代表: 假如一行是以行首開始(每一行都有),緊鄰著c.a.t、接著緊接行尾,就匹配。
實際代表: 內容只有cat的一行,沒有額外單詞、空白、符號......只有'cat'。
^$
字面上代表: 假如一行是以行首開始,緊接行尾,就匹配。
實際代表: 一個空行(裡面什麼都沒有,連空白也沒有)。
^
字面上代表: 假如一行有行首,就匹配。
實際上沒有意義: 因為每一行都有行首,就算空行也會匹配。
[^...]
會匹配任何沒有列出的字元,與[...]剛好相反。
ex. % eprep 'q[^u]' word.list
Iraqi
miqra
qasida
qintar
qoph
zaqqum