SH-项目标识替换内容

2021-11-01  本文已影响0人  NJ_墨

项目文件内容替换,根据不同标识等替换对应内容
修改国际化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
上一篇 下一篇

猜你喜欢

热点阅读