在編寫程式時,或者編寫網頁時,在處理一些不固定的字元時,我們通常會使用形如:. * ?等字元,而我們就把這稱作是正規表達式,尤其是我們在浏覽一些網站進行使用者注冊時,通常會見到對我們的帳号、密碼、郵箱等格式或複雜程度進行限制,而這一切都是正規表達式的功勞,而正規表達式在不同的環境中也是具有不同的作用的。
在正規表達式中我們一般是将這些組成正規表達式的字元稱作“元字元”。
在Linux下,正規表達式:
^PATTERN 行首錨定符,以PATTERN為行首開始
PATTERN$ 行尾錨定符,以PATTERN為行尾結束
\<PATTERN 詞首錨定符,以PATTERN為詞首開始的單詞
PATTERN\> 詞尾錨定符,以PATTERN為詞尾結束的單詞
. 比對任意單個非空字元
* 比對此前的字元0到任意次
.* 比對此前長度的任意字元(當正規表達式中包含能接受重複的限定符時,通
常的行為是【在使整個表達式能得到比對的前提下】比對盡可能多的字元,我們将其稱之為:貪婪模式)
? 比對此前的字元0次或1次
\{m,n\} 比對之前字元至少m次至少n次(注:比對至少2次多則不限\{2,\} 比對最多5次少則不限\{0,5\} 比對5次\{5\})
[] 比對指定範圍内的任意單個字元
[^] 比對指定範圍外的任意單個字元
\(\) 辨別引用和分組,做引用時,在後面要使用括号中的字元時隻需輸入\n,
n辨別次表達式中的從左至右的第幾個括号;做分組作用時,是指括号中的為一組,執行共同的動作
而在Linux中我們通常使用的文本查找工具grep、egrep、fgrep都是配合正規表達式來使用的:
grep:基本正規表達式;
egrep:擴充正規表達式;
fgrep:快速搜尋全部的字元。
grep [option] file
--color=auto|always 指定比對到的字元所顯示的顔色
-E 支援擴充正規表達式即:grep -E = egrep
-v 取反
-i 忽略大小寫
-r 搜尋多個檔案,即:遞歸搜尋
-B NUMBER 顯示搜尋到的行的上NUMBER行
-A NUMBER 顯示搜尋到的行的下NUMBER行
-C NUMBER 顯示搜尋到的行的上下NUMBER行
-o 隻顯示比對到的内容本身,并非所在的行
egrep 擴充正規表達式:擴充正規表達式對标準正規表達式的某些元字元進行了簡化如:
\{m,n\} ----> {m,n}
\(\) ----> ()
添加了:
| 表示或的意思
+ 比對之前字元1次或任意次
例子:
1、搜尋以redhat為行開始的行在/etc/passwd中 #grep --color=auto "^redhat"
/etc/passwd
2、搜尋以 :為行結尾的行在/etc/passwd中 #grep --color=auto ":$"
3、搜尋不是以字母r開頭的單詞在/etc/passwd中 #grep --color=auto -v -o
"\<r" /etc/passwd
4、搜尋以字母d結尾的單詞在/etc/passwd中 #grep --color=auto "d\>"
5、搜尋形如XXX.XXX.XXX.XXX的行,X隻為數字在/tmp/test/a.txt中 #grep --
color=auto "\([[:digit:]]\{3\}\.\)\{3\}[[:digit:]]\{3\}" /tmp/test/a.txt
6、搜尋以其為附加組多于兩個使用者的組 #grep --color=auto "\(,.*\)\{2\}$" /etc/group
7、搜尋密碼永不過期的使用者 #grep --color=auto "\(.*\)\{4\}99999" /etc/shadow
相信你看過後,對正規表達式和grep已經能夠熟練使用了!
本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/774305,如需轉載請自行聯系原作者