计算bash中的(非空白)代码行

时间:2020-03-06 14:32:22  来源:igfitidea点击:

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

解决方案

awk '/^[[:space:]]*$/ {++x} END {print x}' "$testfile"

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

如果我们认为注释为空行:

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

虽然,这取决于语言。

'wc'计算行,单词,字符,因此要计算所有行(包括空白行),请使用:

wc *.py

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

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

'-v'告诉grep输出所有匹配的行
'^'是一行的开始
'\ s *'为零或者多个空格字符
" $"是一行的结尾

  • .py是我要计数的所有文件的示例(当前目录中的所有python文件)
    管道输出到wc。就行了。

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

如果要使用除Shell脚本以外的其他内容,请尝试CLOC:

cloc counts blank lines, comment
  lines, and physical lines of source
  code in many programming languages. It
  is written entirely in Perl with no
  dependencies outside the standard
  distribution of Perl v5.6 and higher
  (code from some external modules is
  embedded within cloc) and so is quite
  portable.

使用常见的Shell实用程序,可以通过多种方法来执行此操作。

我的解决方案是:

grep -cve '^\s*$' <file>

这会在<file>中搜索与模式(-e)'^ \ s * $'相匹配的不匹配(-v)行,这是一行的开头,后跟0个或者多个空格字符,然后是在一行的末尾(即除空格外没有其他内容),并显示匹配行数(-c)而不是匹配行本身。

这种方法相对于涉及到wc的方法的一个优点是,我们可以指定多个文件并为每个文件获得单独的计数:

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

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

cat 'filename' | grep '[^ ]' | wc -l

应该可以解决问题

这有点取决于项目中文件的数量。从理论上讲,我们可以使用

grep -c '.' <list of files>

我们可以在其中使用find实用程序填充文件列表。

grep -c '.' `find -type f`

将为我们提供每个文件的行数。

#!/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是要查看的文件的扩展名。具有不同扩展名的所有文件都将被忽略。