一、背景
對于很多的測試人員來說,grep命令都很熟悉,用的最多的比如去查找指定的進程:ps -ef | grep ***
其中***為進程名或進程號,這里我們只用到的grep的最基礎功能-從標準輸出中過濾指定的字符串,實際上grep的功能遠不止如此。
這篇文章給大家來介紹下grep的進階及高階用法,來幫助我們在測試工作中提升效率。
grep的全稱:Global search Regular Expression and Print out the line。
是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,并默認輸出匹配行。
grep和sed、awk一起成為linux中的三劍客。
grep可以不使用正則,但是跟正則一起配合使用時,功能最為強大!
二、命令語法
grep提供兩種方式:
◆ grep [option] [pattern] testfile
◆ stdout | grep [option] [pattern]
第一種是從文本中直接使用pattern匹配搜索
第二種是從標準輸出中處理 grep所提供的option(參數選項)
我們先從第一個最簡單的示例開始:先準備一個測試文件。
內容如下:
從文本文件中搜索test字符串
可以看到包含有"test"的行被打印出來,默認grep是區分大小寫的。
所以"Test","TEST"沒有被匹配出來。
如果想要不區分大小寫,我們可以加"-i"的參數。
如下:
當前我們的測試文本內容比較少,我們肉眼可以見到是在第幾行。
如果文本行數較多的情況下那就不太方便了,這里就可以用到"-n"的參數
包含有"test"的并且不區分大小寫的行在開頭會顯示行號,現在的結果中匹配的關鍵字所在行全部內容都會輸出。
如果只想要看到匹配的關鍵字,怎么辦?
使用"-o"參數即可
有時候我們需要對整個目錄去搜索關鍵字,如果直接使用grep "test" 目錄名,會報錯。
加參數'-r'就可以避免這個問題
可以看到shellTest目錄下的兩支文件test1.txt以及testfile都包含test被打印出來了
“-q”選項表示使用靜默模式,在此模式下grep命令不會有任何的打印結果,無論是否有匹配到。
一般來說我們可以根據echo $?
來查看上一條指令(grep)的執行結果,如果返回結果為0,表示grep有匹配到了,如果返回結果為1,表示grep沒有匹配到。
一般我們可以shell腳本中去用if條件分支進行判斷,如果echo%20$?結果為0,就去執行相應的操作
三、grep結合pattern正則
前面我們介紹了參數的基本用法,grep的強大之處其實是和正則表達式一起才有作用。
注:本篇文章不會具體介紹正則表達式的使用,如果不了解正則表達式的同學推薦去看下之前相關的文章
我們知道在正則表達式中分為了兩類:
01%20基本正則表達式
◆%20.%20單個字符
◆%20*%20表示前面的字符連續出現任意次,包括0次
◆%20^%20表示錨定行首
◆%20$%20表示錨定行尾
◆%20[a-z]%20[0-9]%20區間范圍
......
02%20擴展正則表達式
◆%20?表示匹配其前面的字符0或1次
◆%20+%20表示匹配其前面的字符至少1次,或者連續多次,連續次數上不封頂。
◆%20()%20分組
◆%20{}%20連續匹配
◆%20|%20匹配多個表達式的任何一個
......
如查詢以"lemon"單詞開頭
查找文件中空白行的數量
正則“^$”表示空白行,參數“-c”表達計算行數
連續字數的正則匹配,如:查找“Appium”,p是連續的
“{2}”表示p連續出現了兩次,可以發現結果是匹配不到的。
因為{}是擴展正則表達式,grep默認是基本正則表達式,如果需要支持擴展正則表達式,我們需要加"-E"選項:
本文由檸檬班歪歪原創,轉載需注明出處!