grep

基礎(chǔ)

參考

用于從提交歷史或者工作目錄中查找一個字符串或者正則表達(dá)式。

  1. grep 不能查找未跟蹤的文件霉祸。

  2. 基本格式為 git grep <content> <sha1> file... 會輸出所有包含 content 的行瘦陈。

    • 基礎(chǔ)格式中嘹朗,可以省略 sha1 與 file蔓同。

    • 不指定 sha1 值時传睹,就在當(dāng)前工作目錄中進(jìn)行查找。指定 sha1 值時模暗,會在指定的版本中進(jìn)行查找禁悠。

    • 不指定 file 時,會查找所有文件兑宇;指定文件時碍侦,會查找指定的文件。

  3. 在基本格式的最后可以指定多個文件。

  4. 該命令會遞歸查找子文件瓷产。所以不需要額外的參數(shù)指定成遞歸模式站玄。

$ git grep xx
test.html:xxx
xxx.xxx:xxxxxx 修

命令用于查找所有包含字符串 xx 的行。

如果指定了文件濒旦,則只會查找指定文件中滿足條件的行株旷。


常用選項

選項 含義
-n 輸出匹配項所在的行
--count 或 -c 輸出文件中匹配的個數(shù)
-p 查看匹配的行屬于哪一個方法
--name-only 只顯示文件名
-i 查找的內(nèi)容不區(qū)分大小寫
-e 后跟正則表達(dá)式
-v 顯示不滿足條件的行

基本選項

如:

$     git grep -n xx
test.html:2:xx
xxx.xxx:1:xxx
$     git grep --count xx
test.html:1
xxx.xxx:1

第一個命令表示從當(dāng)前工作目錄中查找含有字符串 xx 的行,并輸出尔邓。

第二個命令表示輸出每一個文件中能匹配字符串 xx 的次數(shù)晾剖。可以將 --count 換成 -c 梯嗽。

$     git grep -p a *.java
cid.java:private void a(){}
cid.java=public void b(){
cid.java:       a();

倒數(shù)第二行輸出了 a() 函數(shù)的調(diào)用者為 b() 函數(shù)齿尽,雖然該行沒有包含字符 a。

一般來說灯节,使用 -p 時循头,需要將查找范圍限定在源文件。如上例中炎疆,使用 *.java 限定只查找后綴名為 java 的文件贷岸,這樣可以避免別的文件的干擾。

-v

用于顯示不滿足條件的行磷雇。

如:

$ cat test
Transfer your stuff from iOS in 3 easy steps.
First, download Google Drive to your iOS device and sign in with your Google account.
If you don’t have a Google account,
You can create one now or when you sign in to Google Drive.

$ git grep -v -i 'google'
test:Transfer your stuff from iOS in 3 easy steps.
test:

第一個命令用于獲取當(dāng)前 test 文件的內(nèi)容偿警。第二個命令用于顯示不滿足 google (不區(qū)分大小寫情況下) 的行。


-e

-e 選項后面跟正則表達(dá)式唯笙。

注意:

  1. 使用時螟蒸,需要將 {、} 進(jìn)行轉(zhuǎn)義崩掘。

如:

$ git grep -ni -e 'o\{2\}'
test:2:First, download Google Drive to your iOS device and sign in with your Google account.
test:3:If you don’t have a Google account,
test:4:You can create one now or when you sign in to Google Drive.

在不區(qū)分大小寫的情況下七嫌,獲取含有兩個字母 o 的行。如果上述命令不對 {} 進(jìn)行轉(zhuǎn)義會報錯苞慢。


邏輯關(guān)系

選項 含義
--and 與诵原。表示表示必須滿足
--or 或。表示條件滿足一個即可
--not 否挽放。不能滿足指定的條件
() 修改邏輯執(zhí)行順序绍赛。小括號內(nèi)的先執(zhí)行

默認(rèn)的邏輯關(guān)系是 --or

使用 () 時一定要注意:需要對 ( 和 ) 進(jìn)行轉(zhuǎn)義辑畦,同時 ( 和 ) 與具體內(nèi)容之間應(yīng)通過空格隔開吗蚌。

下面操作的所有文件都與 -v 時文本相同。

  1. 如果想獲取含有 google 字樣和數(shù)字的行纯出,可以使用如下命令:

    $ git grep -n -i -e 'google' --and -e '[0-9]'
    

    可以發(fā)現(xiàn)蚯妇,沒有輸出的內(nèi)容敷燎。因為文本中沒有滿足指定條件的行。

  2. 如果想要獲取含有 google 字樣或數(shù)字的行箩言。命令如下:

    $ git grep -n -i -e 'google' -e '[0-9]'
    test:1:Transfer your stuff from iOS in 3 easy steps.
    test:2:First, download Google Drive to your iOS device and sign in with your Google account.
    test:3:If you don’t have a Google account,
    test:4:You can create one now or when you sign in to Google Drive.
    

    在命令中第二個 -e 之前省略了 --or硬贯。因為默認(rèn)的就是 or。

    可以發(fā)現(xiàn)將所有的行都輸出了陨收。因為第一行含有數(shù)字 3饭豹,其余行含有 Google,在忽略大小寫的情況下可以匹配 google畏吓。

  1. 如果要獲取含有 google 墨状,同時不能含有 ios 的行。命令如下:

    $ git grep -n -i -e 'google' --and --not -e 'ios'
    test:3:If you don’t have a Google account,
    test:4:You can create one now or when you sign in to Google Drive.
    

    命令中通過 --not 對表達(dá)式進(jìn)行否定菲饼。因為第二行含有 ios 字樣肾砂,所以不滿足 --not -e 'ios' 條件,無法被輸出宏悦。

  1. --and 優(yōu)先級高于 --or镐确。如:

    優(yōu)先級

    從中可以看出,所以行都滿足條件饼煞。因為第一行滿足 or 前面的條件源葫,而剩余的三行滿足后面的條件。

  1. 可以通過使用 () 使 or 先執(zhí)行砖瞧。如:

    $ git grep -n -i -e 'ios' --and \( -e '[0-9]' --or -e 'google' \)
    test:1:Transfer your stuff from iOS in 3 easy steps.
    test:2:First, download Google Drive to your iOS device and sign in with your Google account.
    

    上述命令查找的行必須含有字符串 ios 息堂,同時也必須有數(shù)字或 google。因此块促,只有一荣堰、二行滿足條件。

    在寫命令時竭翠,( 與 ) 都進(jìn)行了轉(zhuǎn)義振坚,同時 ( 、 ) 與具體的內(nèi)容 ( 即 -e '[0-9]' --or -e 'google' ) 都使用空格進(jìn)行了分隔斋扰。


指定版本

grep 命令可以查詢指定版本中滿足條件的語句渡八。

使用該功能可以 導(dǎo)出指定版本的指定文件

如:

$ cat aa
a11
a2
a33
$ git grep -e '[\s\S]*' HEAD~ -- aa
HEAD~:aa:a11
HEAD~:aa:a2

使用的正則表達(dá)式可以匹配任何字符传货,因此輸出時屎鳍,會輸出 HEAD~ 版本中 aa 文件的所有內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末损离,一起剝皮案震驚了整個濱河市哥艇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌僻澎,老刑警劉巖貌踏,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窟勃,居然都是意外死亡祖乳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門秉氧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眷昆,“玉大人,你說我怎么就攤上這事汁咏⊙钦” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵攘滩,是天一觀的道長帅刊。 經(jīng)常有香客問我,道長漂问,這世上最難降的妖魔是什么赖瞒? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蚤假,結(jié)果婚禮上栏饮,老公的妹妹穿的比我還像新娘。我一直安慰自己磷仰,他們只是感情好袍嬉,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灶平,像睡著了一般伺通。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上民逼,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天泵殴,我揣著相機(jī)與錄音,去河邊找鬼拼苍。 笑死笑诅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疮鲫。 我是一名探鬼主播吆你,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俊犯!你這毒婦竟也來了妇多?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤燕侠,失蹤者是張志新(化名)和其女友劉穎者祖,沒想到半個月后立莉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡七问,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年蜓耻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片械巡。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡刹淌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出讥耗,到底是詐尸還是另有隱情有勾,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布古程,位于F島的核電站蔼卡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏籍琳。R本人自食惡果不足惜菲宴,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趋急。 院中可真熱鬧喝峦,春花似錦、人聲如沸呜达。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽查近。三九已至眉踱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霜威,已是汗流浹背谈喳。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留戈泼,地道東北人婿禽。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像大猛,于是被迫代替她去往敵國和親扭倾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容