一句shell命令搞定代码行数统计

转载 2016年08月28日 21:48:18

今天面试时,突然被面试官问到怎样用shell命令搞定某个文件夹下java代码行数的统计。

想了一下,基本思路就是找到这个文件夹下面的所有java文件,然后每个文件统计一下代码,外层套个for循环,叠加一下结果,就拿到想要的结果了。

不过显然面试官希望我用一句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个正则,分别去除以/**、*、*/开头的行。不过我自己想着都觉得挫。不知道有没有更好的办法了。

相关文章推荐

一句shell命令搞定代码行数统计

最粗略版 Shell代码   find . -name "*.java"|xargs wc -l|grep "total"|awk ...

Shell统计C++代码行数

轮播图,使用简单,代码里一句话搞定,多个参数可自定义修改

github传送门效果图:实现的功能:1.自动、无限播放的轮播图,对应每个轮播图页面的点击事件(传递position) 2.手指在操作轮播图时(以及该页面不再显示时),轮播图自动播放功能会停止 3...

一行Shell代码查找所有代码行数

最近写简历, 想算下自己的这个项目一共有多少行代码, 好方便在简历上展示. 本来想着一直用git管理代码, 顺便统计下好了. 结果竟然没有在git中找到单独统计行数的工具, 太出乎我意料了. 最近用C...

JAVA作业—从命令行输入两个参数打开文件并计算代码行数 .

import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; impo...

shell统计文本行数脚本

  • 2012-06-04 09:35
  • 813B
  • 下载

使用shell脚本统计源码文件中的注释行数.(// , /**/)

今天看到一求助帖子再问这个事,所以无聊写了个。 用的是awk脚本 , 也就是脚本解释器是用/usr/bin/awk , 而不是/bin/sh 但都是脚本 , 如果你想的话, 可以用shell脚本...

一条shell统计当前目录下的文件行数

初级版本: (1)find ./ -name "*.h" -o -name "*.c" | xargs wc -l | awk 'END{print $1}' (2)find ./ -name...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)