簡單地說,正規表達式就是處理字元串的方法,它以行為機關來進行字元串的處理行為,通過一些特殊的符号的輔助,可以讓使用者輕易打到查找、删除、替換某特定字元串的處理程式。這些特殊字元稱為元字元,其不表示字元本身的意義,用于額外功能性的描述。正規表達式又分為基礎正則與擴充正則。
1)基礎正規表達式
元字元:
.: 比對任意單個字元
[char]: 比對指定範圍内的任意單個字元
[^char]:比對指定範圍外的任意單個字元
字元集合: [:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:],[:alnum:]
比對次數(貪婪模式):
*: 比對其前面的字元任意次 \+:比對其前面的字元至少一次
.*: 任意長度的任意字元 \?: 比對其前面的字元1次或0次
\{m,n\}:比對其前面的字元至少m次,至多n次
位置錨定:指定字元出現位置
^: 錨定行首,此字元後面的任意内容必須出現在行首
$: 錨定行尾,此字元前面的任意内容必須出現在行尾
^$: 空白行
\<或\b: 錨定詞首,其後面的任意字元必須作為單詞首部出現
\>或\b: 錨定詞尾,其前面的任意字元必須作為單詞尾部出現
分組:
\( \) 如:\(ab\)*,将ab最為一個整體比對
\n:後向引用,引用前面的第n個左括号以及與之對應的右括号中的模式所比對到的内容
2)擴充正規表達式
擴充正規表達式,與基本正規表達式的不同在于其不再需要轉譯,增加了“|”這個指令。這裡僅介紹其不同之處。
+: 比對其前面的字元至少1次
?: 比對其前面的字元1次或0次
{m,n}:比對其前面的字元至少m次,至多n次
(): 分組
a|b: a或者b
二、grep的使用
作用:文本搜尋工具,根據使用者指定的“模式”對目标文本逐行進行比對檢查;列印比對到的行;其基本格式為
grep [OPTIONS] PATTERN [FILE...]
[OPTIONS]: 其主要選項有
-i:忽略大小寫--color=auto: 對比對到的文本着色顯示;
-v:顯示沒有被模式比對到的行 -o:隻顯示被模式比對到的字元串
-E:使用擴充正規表達式 -q: 靜默模式,不輸出任何資訊;
-A #:after, 後#行 -B #: before, 前#行
-C #:context, 前後各#行
PATTERN:由正規表達式字元及文本字元所編寫的過濾條件
由于grep同胞的另外兩個指令,egrep相當于 grep -E,fgrep不支援正規表達式,這裡就不再說明
三、執行個體
1、顯示/proc/meminfo檔案中以大小s開頭的行;
2、顯示/etc/passwd檔案中不以/bin/bash結尾的行;
3、顯示/etc/passwd檔案中ID号最大的使用者的使用者名;
4、如果使用者root存在,顯示其預設的shell程式;
5、找出/etc/passwd中的兩位或三位數;
6、顯示/etc/rc.d/rc.sysinit檔案中,至少以一個空白字元開頭的且後面存非空白字元的行;
7、找出"netstat -tan"指令的結果中以'LISTEN'後跟0、1或多個空白字元結尾的行;
8、添加使用者bash、testbash、basher以及nologin(其shell為/sbin/nologin);而後找出/etc/passwd檔案中使用者名同shell名的行;
9、寫一個模式,能比對真正意義上的IP位址;(1.0.0.1--223.255.255.254)
本文轉自 夢想成大牛 51CTO部落格,原文連結:http://blog.51cto.com/yinsuifeng/1842747,如需轉載請自行聯系原作者