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

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

不过显然面试官希望我用一句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文件的内容合并输出了。然后再统计。

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

去除空行版

  1. find . -name "*.java"|xargs cat|grep -v ^$|wc -l    #Output:36335

这个版本靠谱一些了,可以看到去掉空行之后的统计结果变为了:36335,比上个版本干掉了1299行的空行。。。

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

去除注释版

  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里面注释好几种风格,再给你看看这个非常常见的注释,还是会在统计结果里面

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

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

[转] 一句shell命令搞定代码行数统计的更多相关文章

  1. java代码行数统计工具类

    package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...

  2. Git代码行数统计命令

    统计zhangsan在某个时间段内的git新增删除代码行数 git log --author=zhangsan--since=2018-01-01 --until=2019-04-01 --forma ...

  3. 代码行数统计(mac)

    如何统计自己的代码量?下面介绍两个方法: 一.cloc 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码 ...

  4. 【转】VS 代码行数统计

    [转自]http://www.cnblogs.com/JuneZhang/archive/2013/01/10/2854572.html VS用正则表达式统计代码行数 利用VS2010的查找功能和正则 ...

  5. Android Studio代码行数统计插件Statistics

    Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代码行数非常方便,也很详细. 1,首先肯定是将插件下载下来,下载地址: ...

  6. Python实现代码行数统计工具

    我们经常想要统计项目的代码行数,但是如果想统计功能比较完善可能就不是那么简单了, 今天我们来看一下如何用python来实现一个代码行统计工具. 思路:首先获取所有文件,然后统计每个文件中代码的行数,最 ...

  7. 代码行数统计的Java和Python实现

    通过编写程序来统计文件的行数,可以在巩固文件IO知识的同时计算出自己的代码量,以下分别提供Java和Python实现的版本. 解决思路 两种版本的思路几乎相同,每一个文件夹(目录)内的行数都是其所有子 ...

  8. 一句DOS命令搞定文件合并

    用Dos的copy命令实现: copy a.js+b.js+c.js abc.js /b 将 a.js b.js c.js 合并为一个 abc.js,最后的 /b 表示文件为二进位文件,copy 命令 ...

  9. 【Python】代码行数统计

    两级目录,可扩展为N级. # Count the line of dir or file import os, fnmatch, fileinput def ChkFileType(lst): tmp ...

随机推荐

  1. GIMP选择区域Selection Editor

    如图我要选择该图的衣服部分和这个球的部分, 选择Select下的Selection Editor工具,然后点击魔法棒工具(Fuzzy Select Tool),选择衣服: 需要注意以下白色部分是选择的 ...

  2. GIMP矩形选框预圆形选框

    矩形选框,四种框选模式,了解一下 Repalace the current selector Add to the current selection (shift键) Subtract from t ...

  3. 离线web-ApplicationCache

    https://www.html5rocks.com/en/tutorials/appcache/beginner/ http://diveintohtml5.info/offline.html#fa ...

  4. 暴力解说之首次部署NGINX

    前言 本章基于Centos 7.x系统讲解 本章讲解下在项目上线部署的时候对NGINX的操作.有些童鞋在网上百度类似LNMP安装就跟着命令一条一条执行了,如果没报错还好,一旦报错就懵逼状态了.这是对自 ...

  5. python的部分内置函数

    内置函数思维导图:https://www.processon.com/mindmap/5c10ca52e4b0c2ee256ac034 内置函数 匿名函数 匿名函数统一的名字是:<lambda& ...

  6. 杭电 5748 Bellovin

    Description Peter has a sequence  and he define a function on the sequence -- , where  is the length ...

  7. 牛客网暑期ACM多校训练营(第五场) E room(最小费用最大流 , 最小权二分图匹配模板)

    链接: https://www.nowcoder.com/acm/contest/143/E 题意: 给定n个宿舍的新安排, 每个宿舍都有4个人, 问要至少有多少个人换位才能变成新安排. 可以建一个二 ...

  8. Hibernate 框架理解

    Hibernate框架简化了java应用程序与数据库交互的开发.Hibernate是一个开源,轻量级的ORM(对象关系映射)工具. ORM工具简化浏览数据的创建,数据处理和数据访问.它是将对象映射到数 ...

  9. java 罕见的依赖报错 jstat: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

    java 都用了N长时间了,突然,意外地发现有一个依赖的so文件从来没找见过 # ldd /usr/bin/java linux-vdso.so.1 =>  (0x00007fffba76900 ...

  10. [转]常见linux命令用法介绍

    su switch user 用途:用于用户之间的切换 格式: su - USERNAME切换用户后,同时切换到新用户的工作环境中 su USERNAME切换用户后,不改变原用户的工作目录,及其他环境 ...