当前位置:  开发笔记 > 编程语言 > 正文

bash中的count(非空白)代码行

如何解决《bash中的count(非空白)代码行》经验,为你挑选了7个好方法。

在Bash中,如何计算项目中非空行代码的数量?



1> Michael Cram..:
cat foo.c | sed '/^\s*$/d' | wc -l

如果您考虑注释空白行:

cat foo.pl | sed '/^\s*#/d;/^\s*$/d' | wc -l

虽然,这是语言依赖.


要对所有子文件夹中的所有文件执行此操作并使用"//"排除注释,请将此命令扩展为:find.-type f -name'*.c'-exec cat {} \; | sed'/ ^\s*#/ d;/^\s*$/d;/^\s*\/\// d'| wc -l
只是习惯.我从左到右阅读管道,这意味着我通常从cat开始,然后是动作,动作,动作等.显然,最终结果是一样的.
不知道为什么你在那里使用猫.使用foo.c或foo.pl作为文件名传递给sed.sed'/ ^\s*$/d'foo.c | wc -l
一般来说,UUOC并不重要,但可读性是.
你可以在没有UUOC的情况下从左到右阅读:`@Andy:给他无用的猫奖!

2> Gilles..:
#!/bin/bash
find . -path './pma' -prune -o -path './blog' -prune -o -path './punbb' -prune -o -path './js/3rdparty' -prune -o -print | egrep '\.php|\.as|\.sql|\.css|\.js' | grep -v '\.svn' | xargs cat | sed '/^\s*$/d' | wc -l

上面将为您提供项目(当前文件夹和所有子文件夹递归)的代码行(删除空行)的总计数.

在上面的"./blog""./ punbb""./ js/3rdparty"和"./pma"是我黑名单的文件夹,因为我没有在其中编写代码.此外,.php,.as,.sql,.css,.js是正在查看的文件的扩展名.将忽略具有不同扩展名的任何文件.



3> xsl..:

如果您想使用shell脚本以外的其他内容,请尝试 CLOC:

cloc在许多编程语言中计算空白行,注释行和源代码的物理行.它完全用Perl编写,在Perl v5.6及更高版本的标准发行版之外没有依赖项(某些外部模块的代码嵌入在cloc中),因此非常便携.


当我第一次问这个问题时,“ cloc”将Python文档字符串视为代码行,这不是最理想的恕我直言。现在,现代版本的“ cloc”将Python文档字符串视为注释,我对此非常满意。

4> SpoonMeiser..:

使用常见的shell实用程序有很多方法可以做到这一点.

我的解决方案是:

grep -cve '^\s*$' 

这将在中搜索与模式(-e)'^\s*$'匹配的不匹配(-v)行,这是一行的开头,后跟0或更多的空白字符,然后是在一行的末尾(即除了空白之外没有其他内容),并显示匹配行的计数(-c)而不是匹配的行本身.

此方法相对于涉及管道的方法的一个优点wc是,您可以指定多个文件并为每个文件获取单独的计数:

$ grep -cve '^\s*$' *.hh

config.hh:36
exceptions.hh:48
layer.hh:52
main.hh:39


谢谢!顺便提一下,wc确实为每个给定文件提供了一个计数,加上总数.

5> Jonathan Har..:

'wc'计算行,单词,字符,所以计算所有行(包括空行)使用:

wc *.py

要过滤掉空行,可以使用grep:

grep -v '^\s*$' *.py | wc

'-v'告诉grep输出所有行,除了那些匹配'^'的行是'\ s'的开头''是零或者更多的空白字符'$'是行的结尾*.py是我的例子你想要计算的所有文件(当前目录中的所有python文件)管道输出到wc.就行了.

我正在回答我自己的(真实的)问题.找不到覆盖此内容的stackoverflow条目.


\ W不是空格匹配,它匹配非单词字符.它与\ w,单词字符相反.\ W将匹配任何非字母数字或下划线的内容,因此不会执行您在此声明的操作.你的意思是\ s

6> coastline..:

此命令计算项目中非空行的数量.
cat fileName | grep -v ^$ | wc -l
grep -v ^ $正则表达式函数是忽略空行.


也不需要`wc -l`,因为grep具有`-c`:`grep -vc ^ $ fileName`
在此链中不需要`cat`:`grep -v ^ $ fileName | wl -l

7> curtisk..:
cat 'filename' | grep '[^ ]' | wc -l

应该可以解决问题


当您首先将文件名作为参数传递给grep时,为什么要使用cat并将文件通过管道传递到grep中?
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有