`

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

阅读更多

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

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

不过显然面试官希望我用一句shell搞定,当场晕菜了,没搞定。回来想了一下,其实确实不是啥太难的问题。

 

最粗略版

find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}'
find . -name "*.java"|xargs cat|wc -l    #Output:37634

上面的两句效果一样,只不过第二种是先利用cat将多个java文件的内容合并输出了。然后再统计。

不过两个都有共同的毛病——连文件里面的空行都给统计进去算作一行了。

去除空行版

find . -name "*.java"|xargs cat|grep -v ^$|wc -l    #Output:36335
这个版本靠谱一些了,可以看到去掉空行之后的统计结果变为了:36335,比上个版本干掉了1299行的空行。。。 

但是,java代码还有注释呢啊?!Fuck,还得干掉注释!

去除注释版

# exclude the lines begin with //
find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l    #Output:36064

好,这个方法发现,以//开头的注释有36335-36064=271行。这里需要注意的是,注释行未必就以//作为开头,可能N个空格之后才开始的的//,所以匹配时需要加上上面的^\s*放在开头。

大功告成啦?扯淡!!!

java里面注释好几种风格,再给你看看这个非常常见的注释,还是会在统计结果里面

/**
 * @author xxx 2012-6-15 下午3:19:47
 */

咋搞?这种注释我还真没想好怎么方便的除去,简单粗暴的方法但是可以在上面grep的参数里面再加入3个正则,分别去除以/**、*、*/开头的行。不过我自己想着都觉得挫。不知道有没有更好的办法了。

分享到:
评论
2 楼 yyang11 2015-12-23  
grep也可以换成sed:
find . -name "*.java" | sed '/^$/d; /\/\//d' | wc -l
1 楼 di1984HIT 2013-09-04  
这就可以了。

相关推荐

    shell 命令统计代码行数的简单代码

    此外,文章还提供了一个更复杂的shell脚本,该脚本不仅可以统计行数,还可以统计字符数、字节数,并按照目录结构进行分层统计。脚本的主要目的是遍历各级子目录,为每个目录生成详细的统计信息。脚本中用到的关键...

    Shell统计C++代码行数

    Shell脚本统计C++ "*.h" "*.hpp" "*.hxx" "*.c" "*.cpp" "*.cxx" "*.cc"中的代码行数,默认会自动去掉注释、#include、空行、独占一行的大括号行 并且会按一级子目录统计汇总其子目录下面所有代码的行数

    代码行数统计软件

    统计代码行数用的 <br> 源代码行数统计器 <br>作者:庄渭峰 版本:V1.5 类型:免费软件 <br>功能简介: 本... 本软件对 Windows 下和 Unix/Linux 下的源代码文件都可以正确地统计行数。

    Shell脚本统计文件行数的8种方法

    获取单个文件行数 文件:test1.sh 行数:20 方法一 代码如下: awk ‘{print NR}’ test1.sh|tail -n1 如图所示: 方法二 代码如下: awk ‘END{print NR}’ test1.sh 如图所示: 方法三 代码如下: grep -n “” ...

    一个统计代码行数的小工具

    标题中的“一个统计代码行数的小工具”指的是一个专门用于计算源代码文件中代码行数的应用程序。这类工具在软件开发过程中非常有用,因为它能够帮助开发者量化工作量、跟踪项目进度,以及进行代码质量分析。它能处理...

    shell统计文本行数脚本

    shell 统计 文本 行数 脚本 源码

    查找big类-(统计工程下代码的行数的shell小工具)

    标题中的“查找big类-(统计工程下代码的行数的shell小工具)”指的是一个用Shell脚本编写的工具,其主要功能是用于在工程目录下搜索名为“big”的类,并统计这些类中代码的行数。这个工具对于开发者来说非常实用,...

    Shell脚本实现C语言代码行数统计

    本文将通过一个简单的Shell脚本实例,介绍如何使用Shell来统计C语言代码的行数。这个脚本主要是为了去除注释并计算剩余的有效代码行,虽然它并不完美,但可以作为一个基础来进一步改进。 首先,脚本的开头定义了...

    计算C_C++代码行数_源代码

    在Unix/Linux环境中,可以使用shell命令来统计代码行数。例如,`wc -l`命令可以统计文件的行数。如果想排除空行和注释,可以结合使用`grep`和正则表达式: ```bash grep -vE "^$|^\s*//" filename.cpp | wc -l ``` ...

    vc制作atl com shellextension实现对当前文件中源代码行数的统计.zip

    这个项目“vc制作atl com shellextension实现对当前文件中源代码行数的统计”旨在利用C++和ATL(Active Template Library)来构建一个COM组件,该组件作为Shell Extension插入到Windows资源管理器中。当用户右键点击...

    利用statsvn进行代码量统计

    - **统计代码行数**: 计算项目的总代码行数以及每位开发者的代码行数。 - **提交频率**: 分析并展示代码提交的时间分布,帮助识别开发活动的高峰期。 - **贡献者分析**: 识别哪些成员提交了最多的代码,哪些成员活跃...

    linux shell 命令 源代码

    总之,这份"Linux Shell命令源代码"的资料包提供了深入了解Linux系统底层运作的窗口,无论是对初学者还是经验丰富的开发者,都是一个极好的学习资源。通过深入研究,我们可以更好地理解Linux系统,提高解决问题的...

    Android执行shell命令(转)

    可以创建一个包含多个命令的shell脚本(如:`script.sh`),然后通过`adb push`将脚本推送到设备上,再用`adb shell sh script.sh`执行脚本。 6. 源码级操作 对于开发者而言,有时需要在源码层面执行shell命令,...

    计算代码行数

    通过使用shell脚本来实现计算代码行数,文件路径需要自己去修改哦!

    python实现统计代码行数的方法

    本文实例讲述了python实现统计代码行数的方法。分享给大家供大家参考。具体实现方法如下: ''' Author: liupengfei Function: count lines of code in a folder iteratively Shell-format: cmd [dir] Attention: ...

    andorid使用jni执行shell命令例子

    总的来说,通过JNI调用C/C++代码执行shell命令,可以扩展Android应用的功能,实现更底层的操作。不过需要注意的是,这种操作可能会带来安全风险,因此在使用时应确保命令的合法性,避免执行可能危害系统的命令。

    用Shell扩展实现源代码统计程序,用Shell扩展实现源代码统计程序

    "用Shell扩展实现源代码统计程序"的标题和描述暗示了我们要利用Shell脚本来编写一个程序,这个程序可以自动统计源代码文件的数量、行数,以及可能包含的其他指标,如空行、注释行等。下面我们将详细探讨如何使用...

    android 给app授权 执行shell命令

    总的来说,给Android应用授予Root权限并执行shell命令是一个涉及设备修改、权限管理、代码实现和错误处理的复杂过程。务必谨慎操作,因为这可能影响设备安全性和稳定性。对于非专业人士,建议只在充分了解风险和必要...

    在python 中实现运行多条shell命令

    `shell=True`表示通过shell来执行命令,而`&&`则是用来连接两个命令,确保前一条命令成功后才会执行下一条命令。 - **注意**:`shell=True`可能会带来安全风险,因为它允许注入shell命令。在处理用户提供的数据时要...

Global site tag (gtag.js) - Google Analytics