1. 程式人生 > >一句shell命令搞定程式碼行數統計

一句shell命令搞定程式碼行數統計

最粗略版

Shell程式碼  收藏程式碼
  1. find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}'  
  2. find . -name "*.java"|xargs cat|wc -l    #Output:37634  

上面的兩句效果一樣,只不過第二種是先利用cat將多個java檔案的內容合併輸出了。然後再統計。

不過兩個都有共同的毛病——連檔案裡面的空行都給統計進去算作一行了。

去除空行版

Shell程式碼  收藏程式碼
  1. find . -name "*.java"|xargs cat|grep -v ^$|wc -l    #Output:36335
      
這個版本靠譜一些了,可以看到去掉空行之後的統計結果變為了:36335,比上個版本幹掉了1299行的空行。。。 

但是,java程式碼還有註釋呢啊?!Fuck,還得幹掉註釋!

去除註釋版

Shell程式碼  收藏程式碼
  1. # exclude the lines begin with //  
  2. find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l    #Output:36064  

好,這個方法發現,以//開頭的註釋有36335-36064=271行。這裡需要注意的是,註釋行未必就以//作為開頭,可能N個空格之後才開始的的//,所以匹配時需要加上上面的^\s*放在開頭。

大功告成啦?扯淡!!!

java裡面註釋好幾種風格,再給你看看這個非常常見的註釋,還是會在統計結果裡面

Java程式碼  收藏程式碼
  1. /** 
  2.  * @author xxx 2012-6-15 下午3:19:47 
  3.  */  

咋搞?這種註釋我還真沒想好怎麼方便的除去,簡單粗暴的方法但是可以在上面grep的引數裡面再加入3個正則,分別去除以/**、*、*/開頭的行。