如何计算具有某些条件的代码行数

如何计算具有某些条件的代码行数
  • 忽略空行
  • 忽略仅包含空格的行
  • 忽略仅包含制表符的行
  • 忽略以以下开头的行//

只是想添加这个来计算块注释我正在尝试使用脚本

sed '/  "/*"   /,/   "*\"   / p'  a.txt | wc -l

/星星/例如

代码计算 /* 内的每一行/ 包括具有 / 的行和 */

/*
ABC
Def
Thi
*/

答案1

用于grep -c计算匹配行数以-v反转匹配:

grep -cv -e '^\s*$' -e '^\s*//' yourcode.c

如果您的实现不支持,请替换\s为标准等效项。[[:space:]]grep

(并且不要忘记将结果重定向到,/dev/null因为该值根本没有任何有用的含义。)

答案2

使用 GNUsedwc.

sed -E -n '\:^[ \t]*$|^[ \t]*//:!p' infile |wc -l
  • 仅忽略行空格、制表符、空行^[ \t]*$
  • 忽略以 开头的行//^//或者^[ \t]*//如果这些行有空格则跳过。
  • wc -l计算将输出的其余行sed,您可以将其替换为sed -n '$='

或者替换[ \t]*\s*.

sed -E -n '\:^\s*$|^\s*//:!p' infile

awk解决方案。

awk '!/^[ \t]*$/ && !/^[ \t]*\/\//{N++} END{print N}' infile

答案3

使用awk

awk 'NF > 0 && !/^\/\// { c++ } END { print c }'

awk使用正则表达式将每一行拆分为字段。默认情况下,此正则表达式按空格和制表符分割。

如果字段数NF大于零,并且该行不以 开头//,那么我们对其进行计数。最后,打印总和。

//如果您想在一行之前允许任意数量的空白字符(并跳过这些行):

awk 'NF > 0 && !/^[[:space:]]*\/\// { c++ } END { print c }'

相关内容