git grep命令用法

admin發表於2018-08-04

通過git grep命令檢索檔案中的文字內容非常的便利。

此命令引數眾多,這裡不一一介紹,只介紹最為常用的幾種。

更為詳細的用法可以參閱官方文件,開啟方式如下:

[Shell] 純文字檢視 複製程式碼
$ git grep --help

下面通過程式碼例項介紹一下此命令常用的檢索功能。

當前專案下,有兩檔案,readme.txt和antzone.txt,內容分別是:

[HTML] 純文字檢視 複製程式碼
www.softwhy.com

以上是antzone.txt檔案內容。

[HTML] 純文字檢視 複製程式碼
螞蟻部落
softwhy.com
www.softwhy.com

以上是readme.txt檔案內容。

一.檢索指定關鍵字:

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git grep www

上面程式碼可以檢索"www"字串,執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002035hf1bc1sbbvskzzle.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面程式碼在對應檔案,相應行中檢索到字串"www"。

二.檢索關鍵字出現在哪一行:

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git grep -n www

以上程式碼可以檢索"www"字串,並給出出現在檔案中哪一行,執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002119rj2k5xe9xvgkrj25.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

antzone.txt檔案中,檢索到"www",位於第一行。

readme.txt檔案中,檢索到"www",位於第三行。

三.只檢索指定關鍵字出現在哪些檔案中:

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git grep --name-only www

以上程式碼可以檢索"www"字串出現在哪些檔案中,只列出檔名稱,執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002203acs2astcih2s7pzn.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

四.統計每一個檔案中檢索到指定關鍵字的行數:

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git grep -c com

以上程式碼可以統計檔案中有幾行出現了"com"字串,執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002244le9xcelwx9xczwgc.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

五.在指定commit中檢索:

可以在指定的commit提交中進行檢索,下面我們進行第二次提交,將readme.txt檔案內容修改為:

[HTML] 純文字檢視 複製程式碼
螞蟻部落

現在看一下提交歷史記錄,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git log --oneline

程式碼執行截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002424s33iugj3g7uoixnt.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

下面在c2提交中檢索,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git grep com 5027c63

執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002503niuutz16qv9g1viu.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

當然不一定非要是sha-1值,只要能標識指定commit提交即可,比如tag標籤。

六.與條件檢索:

當前檔案antzone.txt和readme.txt檔案內容如下:

[HTML] 純文字檢視 複製程式碼
www.softwhy.com
螞蟻部落

以上是antzone.txt檔案內容。

[HTML] 純文字檢視 複製程式碼
螞蟻部落
螞蟻部落softwhy.com

以上是readme.txt檔案內容。

所謂與條件檢索,就是要行同時滿足多個條件,程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git grep -e 螞蟻 --and -e com

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002629u6y330ecztlcyyet.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

七.或條件檢索:

所謂與條件檢索,就是隻要行滿足其中一個條件即可,程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git grep -e com --or -e 螞蟻

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002718gmvui8oumspefqvo.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

特別說明:or關鍵字可以省略(也就是預設即為or)。

八.與或組合檢索:

當前檔案antzone.txt和readme.txt檔案內容如下:

[HTML] 純文字檢視 複製程式碼
www.softwhy.com
antzone softwhy.com

以上是antzone.txt檔案內容。

[HTML] 純文字檢視 複製程式碼
螞蟻部落
螞蟻部落softwhy.com

以上是readme.txt檔案內容。

和其他語言的與或邏輯運算同樣的,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git grep -e com --and \( -e ant -e 螞蟻 \)

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002847o1plll78rm8lil01.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

九.全匹配檢索:

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git grep --all-match -e 螞蟻 --or -e com

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/002941i3oilhhd6dpt7tps.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

全匹配和普通匹配的區別在於,全匹配必須在全文滿足指定的條件。

比如上面的例子中,如果是全匹配,那麼必須在檔案中,同時具有"螞蟻"和"com"(沒要同一行)。

而普通匹配,只要在檔案中具有"螞蟻"或者"com"中的一個即可。

看普通匹配,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git grep -e 螞蟻 --or -e com

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/003040uvy2cyxtwvxrcxr3.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

antzone.txt檔案內容如下:

[HTML] 純文字檢視 複製程式碼
www.softwhy.com
antzone

由於此檔案中沒有"螞蟻",所以全匹配不成立。

相關文章