计算C源代码中的行忽略注释和空行

时间:2017-03-12 15:54:04

标签: c linux shell line-count

我想计算没有评论的行。

cat `find linux-4.10.2 -name "*.c" -print` | wc -l

.c文件中的计数行

cpp -fpreprocessed -dD -P fork.c

删除评论

grep "^\s*$" fork.c

这计算空行

如何编写命令来计算代码行并清空行?

1 个答案:

答案 0 :(得分:0)

您可以应用以下内容:

while IFS= read -r -d '' fl;do
#your commands here
echo "total lines= $(wc -l <$fl)"
echo "lines without comments= $(wc -l < <(cpp -fpreprocessed -dD -P $fl))"
#Considering that above cpp will return all the lines without the comments.

#more commands
done< <(find linux-4.10.2 -type f -name "*.c" -print0)

PS:我们在find中使用-print0,将null作为文件名分隔符,并确保读取循环时所有文件名都能正确处理,无论它们是否包含特殊字符,空格等等。

PS2:如果您建议注释行的外观,我们也可以使用其他工具(如sed)删除它们。请参阅此示例:

$ a=$'code\n/*comment1\ncooment2\ncomment3*/\ncode'

$ echo "$a"
code
/*comment1
cooment2
comment3*/
code

$ wc -l <<<"$a"
5

$ sed  '/\/\*/,/\*\//d' <<<"$a"  #for variables you need <<<, for files just one <
code
code

$ wc -l < <(sed  '/\/\*/,/\*\//d' <<<"$a")
2