From Pojo.us

Jump to: navigation, search

!/bin/sh                                        
# Written by Andrew Myers, February 1997         

cmd="/bin/mv -i"
usage='Usage: mvsed [-d] [-c <cmd>] [.ef=.et | s/<from>/<to>/[g] | -f <filt>]
<pattern> <file> ...'                                                        
                                                                             
if test "x$TMPDIR" = x                                                       
then                                                                         
  TMPDIR=/tmp                                                                
fi                                                                           
t1="$TMPDIR/mvsed.tmp.$$"                                                    
rm -f "$t1"                                                                  
dup=n                                                                        

while test $# != 0
do                
    case "$1" in  
        -c) cmd=$2;
            shift;;
        --) break;;
        -e) break;;
        -f) break;;
        -d) dup=y;;
        -*) echo $usage 1>&2; exit 1;;
        *) break;;                    
    esac                              
    shift                             
done                                  

if test $# = 0
then          
    echo $usage 1>&2
    exit 1          
fi                  

pat="$1"
file=0
shift

if test "$pat" = "-f"
then
  skip=1
  file=2
  pat=""
  filt="$1"
  shift
fi

while test $# != 0 && test "$pat" = '-e'
do
   skip=1
   file=1
   if test $# = 0; then echo $usage 1>&2; exit 1; fi
   echo "$1" >> $t1
   if test $? != 0; then
      echo "Cannot write temporary file" 1>&2; exit 1; fi
   shift
   pat="$1"
   if test "$pat" = -e; then shift; fi
done

case "x$pat" in
    xs*) skip=1;;
esac

if test x$skip != x1
then
    ext1=`echo "$pat" | awk -F= '{print $1}'`;
    ext2=`echo "$pat" | awk -F= '{print $2}'`;
    if [ "x$ext1" = x ]; then echo $usage 1>&2; exit 1;
    elif [ "x$ext2" = x ]; then echo $usage 1>&2; exit 1; fi
    ext1=`echo "$ext1" | sed 's/\\./\\\\./g' | sed 's/\*/.\*/'`
    ext2=`echo "$ext2" | sed 's/\\./\\\\./g' | sed 's/\*/.\*/'`
    pat=s/"$ext1"/"$ext2"/;
fi

while test $# != 0
do
    f="$1";
    case "$file" in
        0) g=`echo "$f" | sed "$pat"`;;
        1) g=`echo "$f" | sed -f "$t1"`;;
        2) g=`echo "$f" | $filt`;;
    esac
    if test \( "$f" != "$g" \) -o \( "$dup" = y \)
    then
        $cmd "$f" "$g"
    else
        echo "mvsed: $f unchanged by substitution"
    fi
    shift
done
rm -f $t1

exit 0