Mac - shell 使用 sed 对文件中匹配的行进行替换

需求:每次编译 SDK 需要对 IMLibBuildVersion.h 中的 build timeversion 进行替换

#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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容