- 忽略空行
- 忽略仅包含空格的行
- 忽略仅包含制表符的行
- 忽略以以下开头的行
//
只是想添加这个来计算块注释我正在尝试使用脚本
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
使用 GNUsed
和wc
.
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 }'