代码文件头有版本信息,下面一段shell脚本就是用来收索和更新代码头注释里面的斑斑信息的。
从中可以到shell脚本中以下几个小技术点是如何运用的:
1. 利用正则表达式分组匹配指定内容
2. 字符串的定位,截断和拼接处理
3. 指定文件指定行替换指定内容
#!/bin/sh
#two input parameters:
#$1---folder name
#$2---eco number
if [[ $# -lt 2 ]]; then
echo "missing command input parameters"
exit 1
fi
for file in `ls $1/*.[pi]`
do
exec < $file
regex='.+(Revision [eE]nd).+'
x=1
laststr=''
beforestr=''
newversion=''
isfind='no'
while read line
do
if [[ "$line" =~ $regex ]]; then
isfind='yes'
break;
fi
let x++
beforestr=$laststr
laststr="$line"
done
if [[ $isfind != 'yes' ]]; then
echo "Didn't handle $file"
continue;
fi
regex='Revision/:/s+([0-9|/.]+).+'
if [[ "$beforestr" != '' ]]; then
if [[ "$beforestr" =~ $regex ]]; then
lastversion=${BASH_REMATCH[1]}
#Generate next version
while [[ `expr index "$lastversion" .` -ne 0 ]]
do
temp=${lastversion:0:`expr index "$lastversion" .`}
newversion="${newversion}$temp"
lastversion=${lastversion:`expr index "$lastversion" .`}
done
lastversion=`expr $lastversion + 1`
newversion=${newversion}$lastversion
fi
fi
regexeco='ECO/:/s*(/*[a-z|A-Z|0-9| ]*/*)/s+/*//'
if [[ "$laststr" != '' ]]; then
cline="`expr $x - 1`s"
if [[ "$laststr" =~ $regex ]]; then
oldversion=${BASH_REMATCH[1]}
#Replace new version here
sed -i "$cline/$oldversion/$newversion/g" $file
fi
if [[ "$laststr" =~ $regexeco ]]; then
oldeco=${BASH_REMATCH[1]}
neweco="*${2}"
sed -i "$cline/$oldeco/$neweco/" $file
fi
fi
done