我需要制作一个shellscript来更新一个项目的C源代码文件中的注释,我还需要在Makefile中添加一个新的目标来更新Makefile中的版本号。我还需要在Makefile中添加一个新的目标,以便更新Makefile本身的版本号。我会收到一个(未知名称)的压缩文件,里面会有几个文件(命名为:calcmarks.h、calcmarks.c、correlation.c、globals.c、readmarks.c)。这是我目前所拥有的文件,但我对如何使之工作感到非常困惑。
unzip $1
for file in calcmarks.h calcmarks.c correlation.c globals.c readmarks.c
do
e=`grep -oP '(?<= version )[0-9]+' file`
let f=$e+1
sed "s/version $e,/version $f, /" file | sed "s/released.*/released $(date)/" > file
done
我以为我的shellscript会解压这个文件夹,然后对每个文件都会找到注释,用更新的版本号替换版本号,然后用当前日期替换旧日期,但它不起作用。我也不知道如何在Makefile中做一个新的目标来更新Makefile本身的注释。谢谢你!我需要制作一个shellscript来更新Makefile中的注释。
问题是在行
sed "s/version $e,/version $f, /" file | sed "s/released.*/released $(date)/" > file
因为你是从你要写的同一个文件中读取的。由于重定向的原因,你在开始读的同时,也在清空文件,写新的内容。
这可以解决这个问题。
mv file file.bak
sed "s/version $e,/version $f, /" file.bak | sed "s/released.*/released $(date)/" > file
rm file.bak
但这样会更干净
sed -i "s/version $e,/version $f, /; s/released.*/released $(date)/" file