一、grep介紹
全拼:Global search REgular expression and Print out the line.
作用:文本搜索工具,根據(jù)用戶指定的“模式(過濾條件)”對(duì)目標(biāo)文本逐行進(jìn)行匹配檢查,打印匹配到的行.
模式:由正則表達(dá)式的元字符及文本字符所編寫出的過濾條件﹔
語法:
grep [options] [pattern] file
命令 參數(shù) 匹配模式 文件數(shù)據(jù)
grep命令里的匹配模式就是你想要找的東西,可以是普通的文字符號(hào),也可以是正則表達(dá)式
常見參數(shù):
-i: ignorecase,忽略字符的大小寫
-v: 顯示不能被模式匹配到的行
-E: 支持使用擴(kuò)展的正則表達(dá)式元字符(egrep)
-n:顯示匹配行的行號(hào)
-r:遞歸查找子目錄中的文件
-l:只打印匹配的文件名
-c:只打印匹配的行數(shù)
-H: 在顯示符合樣式的那一行之前,表示該行所屬的文件名稱
-s:無聲操作只顯示報(bào)錯(cuò),檢查退出狀態(tài)
-e:使用正則表達(dá)式
-w:精確匹配
-wc:精確匹配次數(shù)
-o:查詢所有匹配字段
-A3:打印匹配行和下三行
-B3:打印匹配行和上三行
-C3:打印匹配行和上下三行
二、grep實(shí)踐
先看一下這個(gè)測(cè)試文件的內(nèi)容吧

2.1、輸出以r開頭的行(不區(qū)分大小寫)

注: 這里的-i代表不區(qū)分大小寫, -n代表顯示匹配行和行號(hào)
2.2、輸出以.結(jié)尾的行

注: 因?yàn)?在這里有著特殊含義, 所以要用\轉(zhuǎn)義一下, 如果不加轉(zhuǎn)義字符的話, grep就會(huì)把它當(dāng)做正則表達(dá)式來處理(.代表的含義是匹配任意一個(gè)字符)
2.3、$符號(hào)
在Linux系統(tǒng)中, 所有文件的結(jié)尾都有一個(gè)$符
可以利用cat -A 查看文件

2.4、^$(代表空行的意思)組合符
找出文件的空行, 以及行號(hào)

2.5、.點(diǎn)符號(hào)
"."點(diǎn)表示任意一個(gè)字符, 有且只有一個(gè), 不包含空行

2.6、*符號(hào)
"*"表示找出前一個(gè)字符0次或一次以上
找出文件中r出現(xiàn)0次或多次的行和行號(hào)

2.7、.*組合符
".*"表示所有內(nèi)容, 包括空行

2.8、^.*t符 (含義: 以任意內(nèi)容開頭, 直到t結(jié)束)

2.9、[abc]中括號(hào)
中括號(hào)表達(dá)式,[abc]表示匹配中括號(hào)中任意一個(gè)字符, a或b或c,常見的形式如下;
[a-z]匹配所有小寫單個(gè)字母[A-Z]匹配所有單個(gè)大寫字母
[a-zA-Z]匹配所有的單個(gè)大小寫字母
[0-9]匹配所有單個(gè)數(shù)字
[a-zA-ZO-9]匹配所有數(shù)字和字母
匹配rt字符中的任意一個(gè),得到它的行數(shù)和行號(hào)

2.10、[^abc]中括號(hào)中去反
[^abc]或[^a-c]這樣的命令, "^"符號(hào)在中括號(hào)中第一位表示排除, 就是排除字符a,b,c
注: 出現(xiàn)再中括號(hào)里的尖角號(hào)表示取反

三、擴(kuò)展正則grep實(shí)踐
使用grep -E進(jìn)行實(shí)踐擴(kuò)展正則, egrep官網(wǎng)已經(jīng)棄用了
3.1、+號(hào)
+號(hào)表示匹配前一個(gè)字符1一次或多次,必須使用grep-E擴(kuò)展正則

3.2、?符
匹配前一個(gè)字符0次或1次
找出文件中包含rt或者rot的行

3.3、|符
豎線|再正則中是或者的意思
找出端口號(hào)為80的進(jìn)程名

3.4、()小括號(hào)
將一個(gè)或多個(gè)字符捆綁在一起, 當(dāng)作一個(gè)整體進(jìn)行處理

3.5、{n,m}匹配次數(shù)
{n,m}:匹配前一個(gè)字符至少n次, 最多m次
{n,}: 匹配前一個(gè)字符至少n次, 沒有上限
{,m}: 匹配前一個(gè)字符最多m次,可以沒有
重復(fù)前一個(gè)字符各種次數(shù), 可以通過-o參數(shù)顯示明確的匹配過程
