因为最后一次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 line
do
#echo "content: "$line
reg=":$" #path
if [[ "$line" =~ $reg ]] #mind space
then #echo "find: "$line
`echo $line >> newtmpfile`
`sed -i 's/://' newtmpfile`
#`sed -i '/^\.$/d' newtmpfile`
fi
done < tmpfile
curr_path=`pwd`
while read pathname
do
# 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/