Grey
全部学习内容汇总: GreyZhang/bash_basic: my learning note about bash shell. (github.com)
1854_bash中的参数传递以及利用bash进行简单的代码行数统计
有时候需要处理多个文件,把每一个文件作为参数传递给某一个程序。这时候可以用到 xargs,而基础的linux教程中提供的wc程序,其实可以用来实现简单的代码行数的统计。
主题由来
这么多年来,自己造轮子的事情没少干。比如说,实现对一个工程C代码的代码行数统计。不过,好的是我之前造好的轮子一直用了很久,而且提供了一些细节性的处理。比如说,过滤掉注释只看有效代码等功能。不过,简单的看文件的自然行数,这样的处理功能是有现成的工具可以用的。如果对于统计来说统计信息就是这样的效果,那么可能利用已有的工具来处理在很多地方都会很通用。而且,这种工具不回限定编程语言。
解决这样的问题,其实关键点在于 xargs 的使用。而这里有一份值得参考的资料: How to Use the xargs Command on Linux
这一份资料我找到的时间比较晚,其实如果早一点的话,或许find的补课也会一起免除了。
实际探索体验以及效果
- xargs的作用就是获取一个命令的输出,当作参数传递给另一个命令。
- 关于unix类型的操作系统的文件特性,这里做了一个简单的介绍。这些信息,之前在看MIT的6.828的课程的时候没少看。
- 为什么会有这样的一个命令出现呢?主要是因为并不是所有的命令都可以把其他命令的标准输出作为输入。
- 这里给出来的应用例子,其实刚好也算是给上面的说明给出了几个命令的例子。
- 除了从管道获取输入之外, xargs 还可以从文件获取信息。
- wc是可以接收文件的,之前我看到的例子对我有一些误导,当时误以为是不可以的。
- xargs可以支持交互式的确认操作。
- 默认下,回车代表这not。
- 这里又是一个组合应用的例子,其实也是很好的find使用的例子。
如何进行C语言代码行数的统计
在了解这样的功能之前,我其实从网络上找到了别人的使用示范进行修改后基本上实现了我的一个需求。具体如下:
find -iname '*\.c' -o -iname '*\.h' | xargs cat | wc -l
如下是代码的执行效果:
- 从上面的结果中,我们能够直接看到一个汇总的行数。而-l其实就是获取并计算了总行数。
其实,wc能够统计到更多的信息。结合这里的教程信息,上面的统计可以写成这样子:
find -iname '*\.c' -o -iname '*\.h' | xargs wc
如下是执行的效果:
- 这里不仅统计出来每一个文件的信息,而且还计算了汇总的信息。汇总后的信息自然还是跟之前统计的结果一致。
小结
开卷有益,多去看看别人的成果会很受益。相比我们自己造出来的轮子,类似bash等命令带给我们的可靠与稳定等体验要好得多。