专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>shell脚本欣赏>

替换某个目录下所有文件中的某个字符串为另一个字符串

百度收藏 QQ搜藏

使用方式如下:
frall.sh /work teststr testok
执行结果如下:
/work目录下所有文件(包括子目录下)中存在teststr字符串的位置,全部被testok字符串所替代.

代码:
#!/bin/sh

useage()
{
echo "useage:$0 dirname oldstr newstr"
echo "attantion:dirname must haven't oldstr!"
}

tf1=/tmp/.f.tmp1
tf2=/tmp/.f.tmp2
workdir=`pwd`
rm -f $tf1
rm -f $tf2

# do with /$2-xxx and /$2-xxx/$2-yyy
if [ $# -eq 0 ];then
        useage
        exit
fi

for dir in `find $1/* -type d`
do
        echo $dir | awk 'BEGIN {FS="/"} ;{print $NF}' | grep $2
        if [ $? = 0 ];then
                echo `echo $dir | wc -c ` $dir >> $tf1
        fi
done
sort -r -n $tf1 -o $tf2

while read LINE
do
        dir=`echo $LINE | cut -d " " -f 2`
        olddir=`echo $dir | awk 'BEGIN {FS="/"};{print $NF}'`
        newdir=`echo $olddir | sed s/$2/$3/g`
        cd $dir;cd ..
        mv $olddir $newdir
        cd $workdir
done < $tf2

for file in `find $1/* -type f`
do
grep $2 $file 1>2 2>/dev/null
  if [ $? = 0 ] && [ $file != $0 ]; then
#       echo "$file have $2 " >> /tmp/nnn
ed - $file << EO
g/$2/s/$2/$3/g
.
w
q
EO
fi
        newname=`echo $file | sed s/$2/$3/g`
        mv $file $newname
done

上一篇:批量修改当前目录下文件后缀 下一篇:backup version 0.59

power by soyo123 2007-2008