一、背景
對(duì)于很多的測(cè)試人員來(lái)說(shuō),grep命令都很熟悉,用的最多的比如去查找指定的進(jìn)程:ps -ef | grep ***
其中***為進(jìn)程名或進(jìn)程號(hào),這里我們只用到的grep的最基礎(chǔ)功能-從標(biāo)準(zhǔn)輸出中過(guò)濾指定的字符串,實(shí)際上grep的功能遠(yuǎn)不止如此。
這篇文章給大家來(lái)介紹下grep的進(jìn)階及高階用法,來(lái)幫助我們?cè)跍y(cè)試工作中提升效率。
grep的全稱:Global search Regular Expression and Print out the line。
是一種強(qiáng)大的文本搜索工具,它能使用特定模式匹配(包括正則表達(dá)式)搜索文本,并默認(rèn)輸出匹配行。
grep和sed、awk一起成為linux中的三劍客。
grep可以不使用正則,但是跟正則一起配合使用時(shí),功能最為強(qiáng)大!
二、命令語(yǔ)法
grep提供兩種方式:
◆ grep [option] [pattern] testfile
◆ stdout | grep [option] [pattern]

第一種是從文本中直接使用pattern匹配搜索
第二種是從標(biāo)準(zhǔn)輸出中處理 grep所提供的option(參數(shù)選項(xiàng))

我們先從第一個(gè)最簡(jiǎn)單的示例開(kāi)始:先準(zhǔn)備一個(gè)測(cè)試文件。
內(nèi)容如下:

從文本文件中搜索test字符串

可以看到包含有"test"的行被打印出來(lái),默認(rèn)grep是區(qū)分大小寫(xiě)的。
所以"Test","TEST"沒(méi)有被匹配出來(lái)。
如果想要不區(qū)分大小寫(xiě),我們可以加"-i"的參數(shù)。
如下:

當(dāng)前我們的測(cè)試文本內(nèi)容比較少,我們?nèi)庋劭梢砸?jiàn)到是在第幾行。
如果文本行數(shù)較多的情況下那就不太方便了,這里就可以用到"-n"的參數(shù)

包含有"test"的并且不區(qū)分大小寫(xiě)的行在開(kāi)頭會(huì)顯示行號(hào),現(xiàn)在的結(jié)果中匹配的關(guān)鍵字所在行全部?jī)?nèi)容都會(huì)輸出。
如果只想要看到匹配的關(guān)鍵字,怎么辦?
使用"-o"參數(shù)即可

有時(shí)候我們需要對(duì)整個(gè)目錄去搜索關(guān)鍵字,如果直接使用grep "test" 目錄名,會(huì)報(bào)錯(cuò)。
加參數(shù)'-r'就可以避免這個(gè)問(wèn)題

可以看到shellTest目錄下的兩支文件test1.txt以及testfile都包含test被打印出來(lái)了
“-q”選項(xiàng)表示使用靜默模式,在此模式下grep命令不會(huì)有任何的打印結(jié)果,無(wú)論是否有匹配到。
一般來(lái)說(shuō)我們可以根據(jù)echo $?
來(lái)查看上一條指令(grep)的執(zhí)行結(jié)果,如果返回結(jié)果為0,表示grep有匹配到了,如果返回結(jié)果為1,表示grep沒(méi)有匹配到。
一般我們可以shell腳本中去用if條件分支進(jìn)行判斷,如果echo%20$?結(jié)果為0,就去執(zhí)行相應(yīng)的操作
三、grep結(jié)合pattern正則
前面我們介紹了參數(shù)的基本用法,grep的強(qiáng)大之處其實(shí)是和正則表達(dá)式一起才有作用。
注:本篇文章不會(huì)具體介紹正則表達(dá)式的使用,如果不了解正則表達(dá)式的同學(xué)推薦去看下之前相關(guān)的文章
我們知道在正則表達(dá)式中分為了兩類(lèi):
01%20基本正則表達(dá)式
◆%20.%20單個(gè)字符
◆%20*%20表示前面的字符連續(xù)出現(xiàn)任意次,包括0次
◆%20^%20表示錨定行首
◆%20$%20表示錨定行尾
◆%20[a-z]%20[0-9]%20區(qū)間范圍
......
02%20擴(kuò)展正則表達(dá)式
◆%20?表示匹配其前面的字符0或1次
◆%20+%20表示匹配其前面的字符至少1次,或者連續(xù)多次,連續(xù)次數(shù)上不封頂。
◆%20()%20分組
◆%20{}%20連續(xù)匹配
◆%20|%20匹配多個(gè)表達(dá)式的任何一個(gè)
......
如查詢以"lemon"單詞開(kāi)頭
查找文件中空白行的數(shù)量

正則“^$”表示空白行,參數(shù)“-c”表達(dá)計(jì)算行數(shù)
連續(xù)字?jǐn)?shù)的正則匹配,如:查找“Appium”,p是連續(xù)的
“{2}”表示p連續(xù)出現(xiàn)了兩次,可以發(fā)現(xiàn)結(jié)果是匹配不到的。
因?yàn)閧}是擴(kuò)展正則表達(dá)式,grep默認(rèn)是基本正則表達(dá)式,如果需要支持?jǐn)U展正則表達(dá)式,我們需要加"-E"選項(xiàng):
本文由檸檬班歪歪原創(chuàng),轉(zhuǎn)載需注明出處!