统计代码行数
第一个例子是统计一个目录中(包含子目录)中的代码行数. 如果想知道当前目录下究竟有多少行的代码, 就可以在命令行中键入如下命令:
find . | grep '\.c$\|\.h$' | xargs wc -l
如果用man find
查看find
操作的功能, 可以看到find
是搜索目录中的文件. Linux中一个点.
始终表示Shell当前所在的目录, 因此find .
实际能够列出当前目录下的所有文件. 如果在文件很多的地方键入find .
, 将会看到过多的文件, 此时可以按CTRL + c
退出.
同样, 用man
查看grep
的功能——"print lines matching a pattern". grep
实现了输入的过滤, 我们的grep
有一个参数, 它能够匹配以.c
或.h
结束的文件. 正则表达式是处理字符串非常强大的工具之一, 每一个程序员都应该掌握其相关的知识. 有兴趣的同学可以首先阅读一个基础的教程, 然后看一个有趣的小例子: 如何用正则表达式判定素数. 正则表达式还可以用来编写一个30行的java表达式求值程序(传统方法几乎不可能), 聪明的你能想到是怎么完成的吗? 上述的grep
命令能够提取所有.c
和.h
结尾的文件.
刚才的find
和grep
命令, 都从标准输入中读取数据, 并输出到标准输出. 关于什么是标准输入输出, 请参考这里. 连接起这两个命令的关键就是管道符号|
. 这一符号的左右都是Shell命令, A | B
的含义是创建两个进程A
和B
, 并将A
进程的标准输出连接到B
进程的标准输入. 这样, 将find
和grep
连接起来就能够筛选出当前目录(.
)下所有以.c
或.h
结尾的文件.
我们最后的任务是统计这些文件所占用的总行数, 此时可以用man
查看wc
命令. wc
命令的-l
选项能够计算代码的行数. xargs
命令十分特殊, 它能够将标准输入转换为参数, 传送给第一个参数所指定的程序. 所以, 代码中的xargs wc -l
就等价于执行wc -l aaa.c bbb.c include/ccc.h ...
, 最终完成代码行数统计.
欢迎关注公众号,与Joker一起探索测试之道。