项目文件内容替换,根据不同标识等替换对应内容
修改国际化Language语言包下.strings文件中内容
终端执行示例:
xxxx.sh /Users/xxx/Language BDemo
Xcode中运行(Run Script)
if [ "${CONFIGURATION}" = "Debug" ]; then
languatePath=${PROJECT_DIR}/ADemo/Language
${PROJECT_DIR}/clanApnam.sh $languatePath "BDemo"
echo ">>>>finish<<<<<"
fi
示例图片1.png
示例图片2.png
相关查询替换命令:
awk,sed,grep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来
AWK是一种处理文本文件的语言。它将文件作为记录序列处理
sed是一种流编辑器,它一次处理一行内容
sed 's/abcd/#####/g' path ( 将文件所有abcd替换成#####)
sed '1,5s/abcd/#####/g' path (将文件前五行中的abcd替换成#####)
sed '/abc/,/xyz/s/eee//g' path (将abc到xvy行中的eee替换成)
sed 's////g' path (将文件中的所有/删除)
sed 可以直接替换, mac下,需要添加'',如sed -i ''
#aaa="old@cc.com"
#bbb="new@cc11.com"
#sed -i '' "s/old@cc.com/new@cc11.com/g" $firePath
#sed -i '' "s/$aaa/$bbb/g" $firePath
#sed -i '' "s|$aaa|$bbb|g" $firePath
完整脚本
#! /bin/bash
#写一个函数,调用的时候不用带括号
#终端执行示例:xxxx.sh /Users/xxx/Language BDemo
sourceNameArray=("ADemo" "BDemo" "CDemo")
function r(){
echo $1
echo $2
#for循环 这个``是esc下面的,意思是调用系统命令;$1指的是传进去函数里的第一变量
rootDir=$1
for file in `ls $1`
do
#这里的判断是判断是否为目录
if [ -d $1"/"$file ]; then
echo "文件:"$file
#可以判断过滤
if [ $file == "xxx" ]; then
echo $file"此目录排除,不替换"
else
#用一种递归的方法来遍历子目录
echo $1"/"$file"为目录"
r $1"/"$file $2
fi
else
echo $1"/"$file "为文件"
#mac上使用的是bsd,而linux上使用的是gnu。
#bsd的find命令第一个参数必须指定目录路径,而gnu可以省略第一个参数
#linux 不需要 find -name
# manc上需要用 find . -name
if echo "$file" | grep -q -E '\.strings$'; then
echo "文件名:"$file" 开始替换 "
firePath=$1"/"$file
for(( i=0;i<${#sourceNameArray[@]};i++)) do
tempName=${sourceNameArray[I]}
echo "查找name: "$2" --->"$tempName
if [ $2 != $tempName ]; then
#查找文件中是否有需要替换的内容
#-c :计算找到 '搜寻字符串' 的次数
if [ `grep -c "$tempName" $firePath` -ne '0' ];then
echo " ===Found!== "$tempName
if [ $2 == "ADemo" ]; then
#邮箱中有@符号,需要特殊处理
newAppEmail="test\@ademo.net"
newAppName="ADemo"
oldAppName=$tempName
oldAppEmail="testcc\@cc.net"
if [ $tempName == "BDemo" ]; then
oldAppEmail="test\@bdemo.com"
elif [ $tempName == "CDemo" ]; then
oldAppEmail="support\@cdemo.com"
fi
echo "oldApp: "$oldAppName" newApp: "$newAppName
echo "oldEami: "$oldAppEmail" newEmail: "$newAppEmail
find $1 -name $file | xargs perl -pi -e "s|"$oldAppName"|"$newAppName"|g"
find $1 -name $file | xargs perl -pi -e "s|"$oldAppEmail"|"$newAppEmail"|g"
#sed 可以直接替换, mac下,需要sed -i '', 添加''
#aaa="old@cc.com"
#bbb="new@cc11.com"
#sed -i '' "s/old@cc.com/new@cc11.com/g" $firePath
#sed -i '' "s/$aaa/$bbb/g" $firePath
#sed -i '' "s|$aaa|$bbb|g" $firePath
elif [ $2 == "BDemo" ]; then
newAppEmail="test\@bdemo.com"
newAppName="BDemo"
oldAppName=$tempName
oldAppEmail="testcc\@cc.net"
if [ $tempName == "ADemo" ]; then
oldAppEmail="test\@ademo.net"
elif [ $tempName == "CDemo" ]; then
oldAppEmail="support\@cdemo.com"
fi
echo "oldApp: "$oldAppName" newApp: "$newAppName
echo "oldEami: "$oldAppEmail" newEmail: "$newAppEmail
find $1 -name $file | xargs perl -pi -e "s|"$oldAppName"|"$newAppName"|g"
find $1 -name $file | xargs perl -pi -e "s|"$oldAppEmail"|"$newAppEmail"|g"
elif [ $2 == "CDemo" ]; then
newAppEmail="support\@cdemo.com"
newAppName="CDemo"
oldAppName=$tempName
oldAppEmail="testcc\@cc.net"
if [ $tempName == "ADemo" ]; then
oldAppEmail="service\@ademo.net"
elif [ $tempName == "BDemo" ]; then
oldAppEmail="test\@bdemo.com"
fi
echo "oldApp: "$oldAppName" newApp: "$newAppName
echo "oldEami: "$oldAppEmail" newEmail: "$newAppEmail
find $1 -name $file | xargs perl -pi -e "s|"$oldAppName"|"$newAppName"|g"
find $1 -name $file | xargs perl -pi -e "s|"$oldAppEmail"|"$newAppEmail"|g"
fi
fi
fi
done
fi
fi
done
}
function start(){
if [ $1 == "" ] || [ $2 == ""]; then
echo "dir:"$1
echo "key:"$2
echo "关键路径或key不能为空,示例:xxx.sh /Users/odd/Documents/DemoA/Language DemoA"
exit
fi
#调用
r $1 $2
}
start $1 $2
网友评论