• shell-替换包名脚本


    re_name_pakge.sh

    old_packge_name=thoughtmechanix
    new_packge_name=lianhe
    
    
    #重命名
    rename_dir()
    {
        old_name=$1
        new_name=$2
        old_dir=$3
        echo exec rename_dir fun
        echo old_name ${old_name}
        echo new_name ${new_name} 
        echo old_dir ${old_dir} 
        
        new_dir=`echo $3 | sed 's/'${old_name}'/'${new_name}'/g'`
        echo new_dir: ${new_dir}
        
        echo mv -rf ${old_dir}  ${new_dir} 
        mv  ${old_dir}  ${new_dir} 
        sleep 2
    }
    
    #重命名所有目录
    foreach_dir()
    {
        old_name=$1
        new_name=$2
        echo exec foreach_dir fun 
        echo old_name ${old_name}
        echo new_name ${new_name} 
        export -f rename_dir  
        find ./* -type d  |sed -n '/^.{0,}com.thoughtmechanix.{0,}$/p'| awk  -v prm=${old_name} -v prm2=${new_name} '{
                cmd="rename_dir "prm" "prm2"  "$1
                system(cmd);
        }'
    }
    
    #替换所有java文件的包名
    find ./* -type f |grep java|sed -n '/.java$/p'|xargs -i sed -i 's/com.thoughtmechanix/com.lianhe/g' {}
    sleep 2
    #重命名所有com文件夹下原包名,重命名为新包名
    foreach_dir  ${old_packge_name}   ${new_packge_name}

    新一版更好用

    mkdir_subfun()
    {  
          path3=$1
          echo "path:"${path3} 
          #如果目录不存在则wbh
          if [ ! -d ${path3}  ]; then
                 mkdir ${path3}
            fi
    }
    
    mkdir_()
    {    
         path2=$1
         export -f mkdir_subfun 
          echo  ${path2} |  sed  's/^[.]{1,1}///g' |sed  's/[/]{1,1}[^/]{1,}$//g' |sed  's///
    /g' |sed  's/
    $//g'|sed -n 's/
    /v/;H;g;s/
    ///g;p'|sed  's/^/./g'| awk  '{
                cmd="mkdir_subfun "$1
                system(cmd);
         }'
    }
    
    subfun()
    {
        path=$1
        echo exec subfun fun
        echo "path:"${path} 
        
        old_package="com.lianhe" 
        new_package="cn.com.linksmart" 
        new_base_path="./new/java/" 
        old_base_path="./"
        
        
        
        
        reg="./new/java/cn/com/linksmart/"
        
          reg2="t\/est"
         #echo reg2: [${reg2}]
         
         reg3=`echo  ${new_package}|sed  's/[.]{1,1}/\\//g'|sed  's/[;]{1,1}/\\//g'` 
         #echo reg3: [${reg3}]
         
          reg4=`echo  ${old_package}|sed  's/[.]{1,1}/\\//g'|sed  's/[;]{1,1}/\\//g'` 
         #echo reg4: [${reg4}]
         
        
         
         reg5=`echo  ${new_base_path}|sed  's///\\//g'` 
         #echo reg5: [${reg5}]
         
         reg6=`echo  ${old_base_path}|sed  's///\\//g'` 
         #echo reg6: [${reg6}] 
         
         reg7=`echo  ${old_package}|sed  's/[.]{1,1}/[.]/{1,1/}/g'` 
         echo reg7: [${reg7}] 
          
        
        new_path=`echo  ${path}|sed  's/'${reg4}'/'${reg3}'/g' |sed  's/^'${reg6}'/'${reg5}'/g'`
        echo new_path: [${new_path}]
          
        mkdir_    ${new_path} 
        cp -r  ${path}  ${new_path}
        echo      cp -r  ${path}  ${new_path}
            
        sed -i   -e 's/'${old_package}'/'${new_package}'/g'  ${new_path}   
    }
    
    fun()
    {  
         #
         rm -rf ./new
         #windows 沙必方式只能一级一级创建目录再考贝
         mkdir ./new
         mkdir ./new/java 
          
         export -f subfun 
          export -f mkdir_
           export -f mkdir_subfun
         find ./*  -type f  | awk  '{
                cmd="subfun "$1
                system(cmd);
        }'
    }
     
    fun2

    sed多行搜索例子(跨行搜索)

    for i in {1..15}
    do
        let num=$i;
        let c=$i+1
        if [[ $i -lt 10 ]] ;then
            v=0$i
        else
            v=$i
        fi
        if [[ $c -lt 10 ]] ;then
            cc=0$c
        else
            cc=$c
        fi
    
        echo v=$v
        echo cc=$cc
    
        cat en2 |sed  -n  '/'$v'-[A][.]/p' >> ok/$v.txt
        cat en2 |sed  -n '/'$v'-[A|B][.]/{:a;n;/'$cc'-[A|B][.]/!p;/'$cc'-[A|B][.]/!ba}' >> ok/$v.txt
        
    done

     cat en2 |sed  -n '/'$v'-[A|B][.]/{:a;n;/'$cc'-[A|B][.]/!p;/'$cc'-[A|B][.]/!ba}' >> ok/$v.txt
    解释一下

         

     -n 默认不打认所有
    '$v'-[A|B][.]为开始标记正则 
    '$cc'-[A|B][.] 为结束标记正则
    /'$cc'-[A|B][.]/!p; 在两标记之间的行的处理方式,打印除结束标志所在行以外的所有行
    :a;n;  :a意为自定义标签名 n;意为提交读取下一行。
    !ba意为 !意为找取了结束标记 b意为跳出循环 a是前面自定义标签名:(如果找不到结束标签则继续跳到:a)




     
  • 相关阅读:
    在Windows 10 环境下安装 Hadoop3.1.2
    jQuery选择器分类
    Hibernate 注解的用法以及说明
    EF中Repository模式应用场景
    C# Lambda表达式
    arpd编译错误
    【转】matplotlib画图时的中文设置
    Xt800、DEFY自带号码归属地更新包,更新至2013.4【数据总数278360条】
    80个Python经典资料(教程+源码+工具)汇总
    POJ 1026:Cipher
  • 原文地址:https://www.cnblogs.com/heling/p/11505488.html
Copyright © 2020-2023  润新知