今天面试时,突然被面试官问到怎样用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个正则,分别去除以/**、*、*/开头的行。不过我自己想着都觉得挫。不知道有没有更好的办法了。
分享到:
相关推荐
主要介绍了shell 命令统计代码行数的简单代码,文中给大家提到了统计行数、字符数、字节数的shell脚本,需要的朋友可以参考下
Shell脚本统计C++ "*.h" "*.hpp" "*.hxx" "*.c" "*.cpp" "*.cxx" "*.cc"中的代码行数,默认会自动去掉注释、#include、空行、独占一行的大括号行 并且会按一级子目录统计汇总其子目录下面所有代码的行数
统计代码行数用的 <br> 源代码行数统计器 <br>作者:庄渭峰 版本:V1.5 类型:免费软件 <br>功能简介: 本... 本软件对 Windows 下和 Unix/Linux 下的源代码文件都可以正确地统计行数。
获取单个文件行数 文件:test1.sh 行数:20 方法一 代码如下: awk ‘{print NR}’ test1.sh|tail -n1 如图所示: 方法二 代码如下: awk ‘END{print NR}’ test1.sh 如图所示: 方法三 代码如下: grep -n “” ...
shell 统计 文本 行数 脚本 源码
主要介绍了Shell脚本实现C语言代码行数统计,本文直接给出实现代码,需要的朋友可以参考下
vc制作atl com shellextension实现对当前文件中源代码行数的统计.zip
通过使用shell脚本来实现计算代码行数,文件路径需要自己去修改哦!
本文实例讲述了python实现统计代码行数的方法。分享给大家供大家参考。具体实现方法如下: ''' Author: liupengfei Function: count lines of code in a folder iteratively Shell-format: cmd [dir] Attention: ...
shell命令shell命令shell命令shell命令shell命令shell命令shell命令shell命令shell命令shell命令shell命令shell命令shell命令shell命令
NULL 博文链接:https://willam2004.iteye.com/blog/1222333
所有linux命令的源代码 cat cp date df dd ls .....
本单元实现了一个伪的Shell,可以用于在Android程序中执行Shell命令,如果需要Root权限,则在执行前,调用AskForRoot方法来获取用户的Root授权,如果不再需要在Root账号下执行命令,则调用ExitRoot方法来退出Root...
1. android上调用jni 2. 在jni里c代码中调用系统shell 3. 执行shell命令 4. 返回android应用层
Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是...
LINUX SHELL命令练习 题
NULL 博文链接:https://huangwenhui5000.iteye.com/blog/1812310
Linux下Shell命令解释器,一、 实现功能: 要求实现一个简单的命令解释器,也就是linux中的shell程序,在本程序中我们将其起名为mysh,要求: 1、 能够执行外部程序命令,命令可以带参数; 2、 能够执行fg、bg、cd、...
放在Post Steps 的shell命令 ,一键自动部署(2021最新版)