shell统计C代码行数

shell统计C代码行数

好久没有写过什么东西,写一下积累一下,也没有写过什么shell,写一个shell统计C程序代码行数试试。

具体代码如下

#目的:该shell的目的是统计代码的行数
#作者:asq
#日期:2016-11-07
#说明:需要先删除/**/行注释,再删除这个段注释,此外不能有嵌套的#if 0 #endif

#!/bin/sh

folder="."
res_path="count_res"
tmp=${res_path}"/"

#第0步设置保存文件的目录
if [ ! -d ${res_path} ]; then
    mkdir ${res_path}
else
        rm -rf ${res_path}/*
fi

#第一步去掉^M字符
for org_name in ${folder}/*.c; do
    new_name=${tmp}`basename $org_name`
        tr -d "\015" < ${org_name} > ${new_name} 
done
for org_name in ${folder}/*.h; do
    new_name=${tmp}`basename $org_name`
        tr -d "\015" < ${org_name} > ${new_name} 
done

#第二步删除一些东西
#2.1删除空行
for file_name in ${res_path}/* ;do
    sed -i "/^[[:blank:]]*$/d" ${file_name}
done
#2.2删除/**/行注释
for file_name in ${res_path}/* ;do
    #sed -i "/^[[:blank:]]*\/\*.*\*\/[[:blank:]]*$/d" ${file_name}
    #不知道怎么了上面的就是删除不了,那就用grep吧
        new_name=${tmp}"new_"`basename ${file_name}`
    grep -v "^[[:blank:]]*\/\*.*\*\/[[:blank:]]*$" ${file_name}  > ${new_name}
        rm ${file_name}
done
#exit 0
#2.3删除/**/段注释
for file_name in ${res_path}/* ;do
    sed -i "/^[[:blank:]]*\/\*.*/,/^[[:blank:]]*.*\*\/$/d" ${file_name}
done
#2.4删除#if 0 #endif段注释
for file_name in ${res_path}/* ;do
    #if 0后面可能有注释
    sed -i "/^[[:blank:]]*#if[[:blank:]][[:blank:]]*0.*/,/^[[:blank:]]*#endif.*/d" ${file_name}
done
#2.5删除//行注释
for file_name in ${res_path}/* ;do
    sed -i "/^[[:blank:]]*\/\/.*/d" ${file_name}
done
#2.6删除单独的}{,暂时留下
#第三步统计
echo "the total line of the program is:"`grep -nr "" ${tmp} | wc -l` > ${tmp}result.txt
echo "finish counting the code's lines, see result in count_res/result.txt"
exit 0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值