Sunday, 19 February 2012

Grep之美 tr

Untitled.html
Thank Eric Wendelins very much, because he agreed me to translate and republish his posts.
Yes, you may translate any of my articles and post them. Attribution would be appreciated, but not required.

Thanks a lot!

Cheers,
Eric
The original post is here: http://eriwen.com/tools/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命令,所以它的輸出結果是一個排序後的<function-name>標籤列表。如果你沒有很多標籤或者文件,那麼你可以通過這個列表來觀察有哪些重複的標籤。讓我們來進一步看看那些比較大的列表。

只輸出重複的標籤

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命令,所以你將在實踐中感受它的優雅。

0 comments:

Post a Comment