日期: 2015年08月27日
正則表達式:
(RegularExpression,在代碼中常簡寫爲rex、regexp或RE)
正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。通常被用來檢索、替換符合某個模式的文本。
正則表達式是指一類字符書寫的模式(pattern)這些字符成爲元字符,元字符不表示其字面意義,而用於表示通配或控制功能。
正則表達式包括兩類:基本正則表達式,擴展正則表達式
grep命令只支持基本正則表達式;
egrep支持擴展正則表達式("e" 表示擴展),
fgrep表示fast grep,不支持正則表達式,所有的元字符都被當做普通字符處理,搜索速度很快。
<<========================================【grep】========================================>>
grep命令
功能:
globalsearch regular expression(RE) and print out the line
全局搜索正則表達式,並把模式所匹配到的整行顯示出來
格式:
grep[options] 'PATTERN' file,...
常用選項:
--color=auto 指定顏色
-v 反向匹配,顯示不能被模式匹配到的行
-o 僅匹配被模式匹配到的字串,而非整行
-i 不區分大小寫,ignore-case
-E 支持擴展
-A # 還顯示模式下面的一行
-B # 還顯示模式上面的一行
-C # 前後各顯示一行
元字符:
. 任意單個字符
* 匹配其前面的字符任意次;
.* 匹配任意長度的任意字符
\? 匹配其左側0次或1次
\+ 其左側字符至少出現1次
[]: 指定範圍內的任意單個字符
[^]:指定範圍外的任意單個字符
[0-9], [[:digit:]]
[a-z], [[:lower:]]
[A-Z], [[:upper:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]
次數匹配:
\{m\} 匹配m次
\{m,n\} 匹配至少m次,至多n次
\{m,\} 至少m次;多則不限
\{0,n\} 至多n次;
位置錨定:
^ 錨定行首,用於模式的最左側
^CHARACTER
$: 錨定行尾,用於模式的最右側
CHARACTER$
\<CHARACTER 錨定詞首,\bCHARACTER
CHARACTER\> 錨定詞尾,CHARACTER\b
錨定單詞:
\<KEYWORD\>
\bKEYWORD\b
^$: 錨定空白行
分組:
\(\)
\(ab\)*xy
引用:
\1: 後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容
\2
...
<<========================================【egrep】========================================>>
egrep命令
grep-e PATTERN [FILE...]
egrep[OPTIONS] PATTERN [FILE...]
★egrep和grep用法、選項、元字符都一樣,
不同的地方就是匹配次數和分組的時候特殊字符無需再使用\轉義
次數匹配:
* 匹配其前面的字符任意次;
? 匹配其前面的字符0或1次;
+ 匹配其前面的字符至少1次
{m} 匹配其前面的字符m次;
{m,n} 至少m次,至多n次
{m,} 至少m次;
{0,n} 至多n次;
位置錨定:
^ 錨定行首,用於模式的最左側
^CHARACTER
$: 錨定行尾,用於模式的最右側
CHARACTER$
\<CHARACTER 錨定詞首,\bCHARACTER
CHARACTER\> 錨定詞尾,CHARACTER\b
錨定單詞:
\<KEYWORD\>
\bKEYWORD\b
^$: 錨定空白行
分組:
()
(ab)*xy
引用:
\1: 後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容
\2
...
|: 或者, ac|bc
grep -E "s(C|c)hool"
結果是:sChool,或school
fgrep:(f=fast)快速匹配,不解析正則表達式
作業:
顯示/etc/passwd文件中以bash結尾的行
顯示/etc/passwd文件中的兩位數或三位數
顯示`netstat-tan`命令結果中以‘LISTEN’後跟0個、1個或者多個空白字符結尾的行
添加用戶bash、testbash、basher以及nologin用戶(nologin用戶的shell爲/sbin/nologin);
而後找出/etc/passwd文件中用戶名與其shell名相同的行
顯示當前系統上root、centos或者user1用戶的默認shell和UID (請事先創建這些用戶,若不存在)
//這裏爲了效果,先顯示了整行信息
找出/etc/rc.d/init.d/functions文件中某單詞(單詞中間可以存在下劃線)後面跟着一組小括號的行
使用echo輸出一個路徑,而後egrep找出其路徑基名;進一步的使用egrep取出其目錄名
找出ifconfig命令執行結果中1-255之間的數字