Natural

 

[demo]sed字符串替换

找出Z:\A、Z:\B目录下所有内容带“APPLE“的文件,把"APPLE"替换成"ORANGE",并输出到Z:\C相应的目录下

  1 #!/bin/sh
  2 # Auto replace the files' content and copy them to the specified directory.
  3 
  4 SEARCH_WORD='APPLE'
  5 REPLACE_WORD='ORANGE'
  6 
  7 SRC_DIR_ARRAY=(
  8 'Z:/A'
  9 'Z:/B'
 10 )
 11 
 12 OUTPUT='Z:/C'
 13 
 14 global_lastDir_pre=''
 15 declare -i count=0
 16 
 17 function checkFileDir
 18 {
 19     local fileNameWithPath=$1
 20     local dirPre=${fileNameWithPath%/*}
 21     local tempPath=${OUTPUT}/${dirPre}
 22     global_lastOutput=$OUTPUT/$fileNameWithPath
 23     
 24     if [ ! -"$tempPath" ]
 25     then
 26         tar -cf - "$fileNameWithPath" | tar -"$OUTPUT" -xf -
 27         rm -"$global_lastOutput"
 28     fi
 29 
 30 }
 31 
 32 function replaceFile
 33 {
 34     local fileNameWithPath=${1#*/}
 35     local regix=$2
 36     local thisDir_pre=${fileNameWithPath%/*
 37     
 38     if [ "$thisDir_pre" = "$global_lastDir_pre" ]
 39     then
 40         sed "$regix" "$fileNameWithPath" > "$global_lastOutput"
 41         continue
 42     fi
 43 
 44     checkFileDir "$fileNameWithPath"
 45     global_lastDir_pre=$thisDir_pre
 46 
 47     sed "$regix" "$fileNameWithPath" > "$global_lastOutput"
 48 }
 49 
 50 function echoNote
 51 {
 52     echo "Wrong directory detected. Please check it !"
 53 }
 54 
 55 function init
 56 {
 57     for src_dir in ${SRC_DIR_ARRAY[*]}
 58     do
 59         if [ ! -"$src_dir" ]
 60         then
 61             echoNote
 62             echo "SRC_DIR_ARRAY: '$src_dir'"
 63             exit
 64         fi
 65     done
 66     
 67     if [ ! -"$OUTPUT" ]
 68     then
 69         echoNote
 70         echo "OUTPUT: '$OUTPUT'"
 71         exit
 72     fi
 73     
 74     rm -rf "$OUTPUT"
 75     mkdir "$OUTPUT"
 76 
 77 }
 78 
 79 
 80 echo -"----------------------------BEGIN--------------------------------\n"
 81 
 82 init
 83 for src_dir in ${SRC_DIR_ARRAY[*]}
 84 do
 85 
 86     cd "$src_dir"
 87     list=`find . -type f | xargs grep -"$SEARCH_WORD"`
 88     #list=`find . -type f | xargs grep -il "$SEARCH_WORD"`    # ignore case
 89     for line in $list
 90     do
 91         grep -Hn "$SEARCH_WORD" "$line" >> "$OUTPUT/log.txt"
 92         #grep -iHn "$SEARCH_WORD" "$line" >> "$OUTPUT/log.txt"    # ignore case
 93         count=count+1
 94         echo $line
 95         replaceFile "$line" "s/$SEARCH_WORD/$REPLACE_WORD/g"
 96         #replaceFile "$line" "s/$SEARCH_WORD/$REPLACE_WORD/Ig"    # ignore case
 97     done
 98 
 99 done
100 
101 echo -"\n----------summary----------"
102 echo "total files size: $count"
103 
104 echo "----------------------------END--------------------------------"
105 

posted on 2012-02-21 15:51 此号已被删 阅读(320) 评论(0)  编辑  收藏 所属分类: Linux


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(8)

随笔分类(83)

随笔档案(78)

文章档案(2)

相册

收藏夹(7)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜