Skip to content

Instantly share code, notes, and snippets.

@illy
Created February 13, 2012 23:39
Show Gist options
  • Save illy/1821500 to your computer and use it in GitHub Desktop.
Save illy/1821500 to your computer and use it in GitHub Desktop.
Chinese translation of grep is a beautiful tool

#grep is a beautiful tool#

Global Regular Expression Print (Grep)大概是每個命令行用戶的必備工具吧?如同find命令一般,將它與其他命令結合起來使用,將大大提高你的效率。

以下這個簡要的教程將幫助你認識到Grep的簡潔和厲害。如果你在Windows平台上,請下載Crywin;如果你剛開始使用正則式,這兒有一個不錯的正則式教程。

##教程##

假設我們希望在JavaScript文件中搜索重複的標籤。讓我們來看看怎麼利用基本的grep來實現。這一技巧可以幫助你搜索無數的重複項,如下:

  1. 重複的HTML標籤

  2. 檢查所使用的CSS標籤

  3. 重複的java標籤

  4. 以及其他

###在某個目錄下搜索所有JS文件的function###

grep "function" *.js

以上命令將輸出當前目錄下所有JS文件中每一行包含“function”的代碼。當然,如果輸出結果包含行數或者文件名稱就更棒了。

###輸出所有開頭是function的代碼,並且包含行數和文件名###

grep -EHn "^s*(function w+|w+ = function)" *.js # -E是regex,H是文件名,n是行數

有時Grep命令可以忽略所有的註釋,隱含標籤,或者其他一些語句,這取決於你怎樣寫JS文件。

###輸出一個含有{function-name}標籤的列表並排序:###

grep -Eho "^s*function w+" *.js | sort

-o只嚴格輸出匹配結果,-E使用extended regex,而-h將幫助你忽略文件名。我接着使用管道鏈接sort命令,所以它的輸出結果是一個排序後的標籤列表。如果你沒有很多標籤或者文件,那麼你可以通過這個列表來觀察有哪些重複的標籤。讓我們來進一步看看那些比較大的列表。

###只輸出重複的標籤###

grep -hEo "^s*function w+" *.js | sort | uniq -d

這就對了!這行命令只輸出重複的標籤。當然我知道,我們可以用awk或者其他工具來實現,但是我不想在這解釋awk的具體細節;)。其實我原本在這寫了那條ask的命令,後來把它刪了,如果你們有興趣的話,可以留言告訴我。

##其他例子##

###統計所有js文件中的function### grep -c "function" *.js

###輸出不含有function的行### grep -v "function" *.js

###列出是所有含有【pidgin的進程(非Win平台)### ps -ef | grep pidgin

##結束語##

grep是最經常使用的命令行工具之一。理解它的基本功能將會更好地提升你的效率。當然還有更多的grep命令,所以你將在實踐中感受它的優雅。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment