From Pojo.us
!/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