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)