Linux中使用Shell脚本去掉源码注释的方法

来源:岁月联盟 编辑:zhuzhu 时间:2007-07-27
Linux中使用Shell脚本去掉源码注释的方法内容简介:

该文件用来终极删除注释,操作系统限linux

#!/bin/bash###the script use to delete commentif [ -z "$1" ];then                  #检测是否输入了源文件     echo "ipput the source file"     exit 1fipostfix=`echo $1 |cut -f 2 -d '.'`   #取文件的后缀,以便根据不同的文件进行不同的处理if [ -n "$2" ];then                  #存放处理源文件产生的信息的文件      target_file=$2                  #如果给出了就直接调用      touch ${target_file}elseprefix=`echo $1|cut -f 1 -d '.' ` #如果没有给出的话则生成一个和源文件名字一样,但后缀为temp的文件     target_file=${prefix}.temp     touch ${target_file}ficase "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 -ffunction 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`;docase $file in*.c )del_comment_file;;*.cpp )del_comment_file;;*.h )del_comment_file;;* )if [ -d $file ];thencd $filedel_commentcd ..fi;;esacdone }Dir=$1if [ ! -e $Dir ];thenecho "The Directory isn't exist."exitficd $Dirdel_comment