grep
grep = Global search REgular expression and Print out the line
語法及用途
grep [OPTIONS] PATTERN [FILE...] 根據用戶指定的“ PATTERN ”對FILE逐行進行匹配檢查,打印匹配到的行; PATTERN 是由正則表達式字符及文本字符所編寫的過濾條件。
常用選項
參數 | 說明 |
---|---|
–color=auto | 對匹配到的文本著色顯示; |
-v | 顯示不能夠被pattern匹配到的行; |
-i | 忽略字符大小寫 |
-n | 顯示匹配的行號 |
-c | 統計匹配的行數 |
-o | 僅顯示匹配到的字符串; |
-q | 靜默模式,不輸出任何信息 |
-A # | after, 后#行 |
-B # | before, 前#行 |
-C # | context, 前后各#行 |
-e | 實現多個選項間的邏輯or關系(grep –e ‘cat ’ -e ‘dog’ file) |
-w | 整行匹配整個單詞 |
-E | 使用擴展正則表達式ERE,否則使用基本正則表達式BRE |
正則表達式
基本正則表達式BRE
字符匹配
字符 | 含義 |
---|---|
. | 匹配任意單個字符; |
[] | 匹配指定范圍內的任意單個字符 |
[^] | 匹配指定范圍外的任意單個字符 |
[:digit:] | 數字 |
[:lower:] | 小寫字母 |
[:upper:] | 大寫字母 |
[:alpha:] | 字母 |
[:alnum:] | 字母與數字 |
[:punct:] | 標點 |
[:space:] | 空字符或tab |
匹配次數
用在要指定次數的字符后面,用于指定前面的字符要出現的次數
字符 | 含義 |
---|---|
* | 匹配前面的字符任意次,包括0次(貪婪模式:盡可能長的匹配) |
.* | 任意長度的任意字符 |
? | 匹配其前面的字符0或1次 |
\+ | 匹配其前面的字符至少1次 |
\{m\} | 匹配前面的字符m次 |
\{m,n\} | 匹配前面的字符至少m次,至多n次 |
\{,n\} | 匹配前面的字符至多n次 |
\{m,\} | 匹配前面的字符至少m次 |
位置錨定
定位出現的位置
字符 | 含義 |
---|---|
^ | 行首錨定,用于模式的最左側 |
$ | 行尾錨定,用于模式的最右側 |
^PATTERN$ | 用于模式匹配整行 |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
\< 或 \b | 詞首錨定,用于單詞模式的左側 |
\> 或 \b | 詞尾錨定;用于單詞模式的右側 |
\<PATTERN\> | 匹配整個單詞 |
分組
\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如:\(root\)\+ 分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, ... \1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符; 實例: \(string1\+\(string2\)*\) \1: string1\+\(string2\)* \2: string2 后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身),即\1引用的第一個匹配到的結果,而非模式。
擴展正則表達式ERE
要使用擴展正則表達式,需要使用egrep或grep -E命令,如下所示: egrep = grep -E egrep [OPTIONS] PATTERN [FILE...]
字符匹配
字符 | 含義 |
---|---|
. | 任意單個字符 |
[] | 指定范圍的字符 |
[^] | 不在指定范圍的字符 |
次數匹配
字符 | 含義 |
---|---|
* | 匹配前面字符任意次 |
? | 0或1次 |
+ | 1次或多次 |
{m} | 匹配m次 |
{m,n} | 至少m,至多n次 |
位置錨定
字符 | 含義 |
---|---|
^ | 行首 |
$ | 行尾 |
\<, \b | 語首 |
\>, \b | 語尾 |
分組
() 后向引用:\1, \2, …
或者
a|b
C|cat :C 或 cat
(C|c)at :Cat 或 cat
練習
顯示/proc/meminfo信息中以s或S開頭的信息
顯示rpc用戶所使用的shell類型
查看/etc/passwd中出現的2~3位數字
查看/etc/grub2.cfg中以空白開始的非空行
查看/etc/passwd 中用戶名與shell同名的用戶信息
顯示當前系統root、mage或wang用戶的UID和默認shell
找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行
使用egrep取出/etc/rc.d/init.d/functions中其基名
使用egrep取出上面路徑的目錄名
統計以root身份登錄的每個遠程主機IP地址的登錄次數
利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
0-9 : [0-9] 10-99 : [1-9][0-9] 100-199 : 1[0-9]{2} 200-249 : 2[0-4][0-9] 250-255 : 25[0-5]
顯示ifconfig命令結果中所有IPv4地址
-
[
pace:] ?
原創文章,作者:taobaibai,如若轉載,請注明出處:http://www.www58058.com/31646