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

本文介绍了一种使用shell脚本在Windows环境下,通过Git Bash递归删除项目中所有源文件代码行后的注释的方法。作者首先利用ls -R列出文件夹下所有文件,然后使用sed命令进行注释删除操作,由于初始命令导致问题,最终将注释替换为换行和分号,再删除以分号开头的行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        因为最后一次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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值