使用shell 脚本递归删除项目中的所有源文件的行注释

来源:互联网 发布:网络悲伤情歌 编辑:程序博客网 时间:2024/06/03 18:26

        因为最后一次Java实验,老师要求在代码行后不要留注释,可以在一些代码段前使用注释。但是因为在这之前我已经写完了,而且加了比较多的注释,如果一个一个删除的话太麻烦,正好这学期学了linux shell,所以我想到使用shell脚本把项目下所有源文件代码行后的注释删掉。虽然是在Windows环境下,但是因为之前为了管理代码下载了Git Bash,所以可以在Git Bash 中使用linux命令。(可以在 http://gitforwindows.org/  下载GitBash)

因为linux 命令对文件的操作非常方便,所以,我先使用ls -R 命令,递归的列出当前文件夹下所有的文件。因为在显示的结果中,会先在一行显示路径(如下图所示),之后再在下面显示该路径下的文件。然后将路径的名称保存在一个临时文件中。


最后,使用sed 。一开始,我在脚本中是用的`sed -i -r 's/(.*)\/\/.*/\1/ $pathname/*.java'`,但是运行后却把分号与注释之间包括注释符删除掉了。所以我把步骤分为两步,首先把注释符替换为换行回车和分号,再把以分号开头的行删掉。脚本内容如下:

#! /bin/bash`ls -R > tmpfile`if [ -f "newtmpfile" ]then `rm newtmpfile`fi`touch newtmpfile`while read linedo#echo "content: "$linereg=":$"#pathif [[ "$line" =~ $reg ]]#mind spacethen#echo "find:   "$line`echo $line >> newtmpfile``sed -i 's/://' newtmpfile`#`sed -i '/^\.$/d' newtmpfile`fidone < tmpfilecurr_path=`pwd`while read pathnamedo#echo 'cd path' $pathname#`cd $pathname`#go into path#`sed -i -r 's/(.*)\/\/.*/\1/ $pathname/*.java'``sed -i -r 's|//|\r\n;|' $pathname/*.java``sed -i -r '/^;/d' $pathname/*.java``cd $curr_path`done < newtmpfile
       再执行之前,可以先用使用git init创建一个仓库,git add . 添加所有的文件,git commit -m ' ' 提交(引号中的是此次提交的注释)。可以使用git log 查看提交记录。在上面的脚本执行后,可以把操作后的提交,也可以使用git reset --hard HEAD将文件返回为之前提交的状态。其中HEAD可以替换为提交记录中对应的那一串字符:



参考:

Shell if中的正则表达式使用详解  www.bkjia.com/jcjc/1104433.html

Sed replace path with slash separators  http://netjunky.net/sed-replace-path-with-slash-separators/

原创粉丝点击