需求:每次编译 SDK 需要对 IMLibBuildVersion.h
中的 build time
和 version
进行替换
#ifndef IMLibBuildVersion_h
#define IMLibBuildVersion_h
#define IMLib_BuildTime @"2020-09-03 15:50"
#define IMLib_Version @"1.8.2"
#endif /* IMLibBuildVersion_h */
shell 如下:
#!/bin/sh
# bulid-imlib.sh
configuration="Release"
DEV_FLAG=""
VER_FLAG=""
for i in "$@"
do
PFLAG=`echo $i|cut -b1-2`
PPARAM=`echo $i|cut -b3-`
if [ $PFLAG == "-b" ]
then
DEV_FLAG=$PPARAM
elif [ $PFLAG == "-v" ]
then
VER_FLAG=$PPARAM
fi
done
buildtime=`date "+%Y-%m-%d %H:%M:%s"`
lib_build_time="IMLib_BuildTime @\"${buildtime}\""
sed -i "" "s/IMLib_BuildTime.*/${lib_build_time}/g" ./IMLibBuildVersion.h
lib_version="IMLib_Version @\"${VER_FLAG}\""
sed -i "" "s/IMLib_Version.*/${lib_version}/g" ./IMLibBuildVersion.h
PS:
匹配行时需要使用正则表达式:
.
表示匹配任意字符,*
表示匹配零次或多次
使用 -i
时,必须提供一个备份文件名后缀,即对原文件进行备份;可以输入空""
,表示不备份
以下这种写法表示对 #define IMLib_Version
开头,任意字符结尾的行进行替换
lib_version="#define IMLib_Version @\"${VER_FLAG}\""
sed -i "" "s/^#define IMLib_Version.*/${lib_version}/g" ./IMLibBuildVersion.h
删除指定行及在指定行下面添加行
line=0
keyWord="CFBundleShortVersionString"
fileName="Info.plist"
line=`sed -n "/$keyWord/=" $fileName`;
if [ $line > 1 ]
then
start=`expr $line - 1`;
end=`expr $line + 1`;
# 删除 line - end 行
sed -i '' $line','$end'd' $fileName
bundle_short_version_key=" <key>CFBundleShortVersionString</key>"
bundle_short_version_value=" <string>${VER_FLAG}</string>"
# 在 start 行下面添加两行
sed -i '' "${start}a\\
${bundle_short_version_key}\\
${bundle_short_version_value}\\
" $fileName
rm -rf 1
fi
sh -x bulid-imlib.sh -v1.8.2.5
网友评论