免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1233 | 回复: 0
打印 上一主题 下一主题

用shell脚本去掉源码的注释 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-22 13:17 |只看该作者 |倒序浏览
该文件用来终极删除注释,操作系统限linux
#!/bin/bash
###the script use to delete comment
if [ -z "$1" ];then                  #检测是否输入了源文件
     echo "ipput the source file"
     exit 1
fi
postfix=`echo $1 |cut -f 2 -d '.'`   #取文件的后缀,以便根据不同的文件进行不同的处理
if [ -n "$2" ];then                  #存放处理源文件产生的信息的文件
     target_file=$2                  #如果给出了就直接调用
     touch ${target_file}
else
     prefix=`echo $1|cut -f 1 -d '.' ` #如果没有给出的话则生成一个和源文件名字一样,但后缀为temp的文件
     target_file=${prefix}.temp
     touch ${target_file}
fi
case "postfix" in
          sh )
              echo "it is shell script !"
              sed 's/[[:space:]]#.*//g' $1 |sed '/^#/d'|\
              sed '/^[[:space:]]*$/d' | sed '/^$/d' >${target_file}
              echo "the source file is $1,target file is ${target_file}"
              ;;
       c|java)
              echo "c  or java program"
              sed 's/\/\*.*\*\///g' $1|sed '/\/\*/,/.*\*\//d' |\
              sed 's/\/\/.*//g' |\
              sed '/^[[:space:]]*$/d' |sed '/^$/d' >${target_file}
              echo "the source file is $1,target file is ${target_file}"
              ;;
        *)
              echo "unknown file type !"
              rm -f ${target_file}
              ;;
esac
#!/bin/sh -f
function del_comment_file()
{
        #C++模式注释的删除。
        #Delete the line begins with //
        #首先删除//在行首的行       
        sed -i '/^[ \t]*\/\//d' $file
        #Delete the line ends with //
        #注意已经除去了 //在行首的情况,下面匹配除去URL的//部分,因为代码中有一部分中有
        #URL,形如fun("ftp://")
        sed -i 's/\/\/[^"]*//' $file
        #删除以C语言中注释只在一行的行
        sed -i 's/\/\*.*\*\///' $file
        #Delete the lines between /* and */
        #删除C语言中注释跨行的情况
        sed -i '/^[ \t]*\/\*/,/.*\*\//d' $file
}
function del_comment()
{
#$Dir=`pwd`
for file in `ls`;do
case $file in
*.c )
        del_comment_file
        ;;
*.cpp )
        del_comment_file
        ;;
*.h )
        del_comment_file
        ;;
* )
        if [ -d $file ];then
                cd $file
                del_comment
                cd ..
        fi
        ;;
esac
done       
}
Dir=$1
if [ ! -e $Dir ];then
        echo "The Directory isn't exist."
        exit
fi
cd $Dir
del_comment

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31547/showart_365267.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP