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

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

作者: iVikings | 来源:发表于2020-09-03 16:04 被阅读0次

需求:每次编译 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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/jkcosktx.html