Vous devrez parfois réaliser une opération de recherche et remplacement
parmi tous les fichiers sources d'une arborescence complète. Un cas
typique consiste à changer le nom d'appel d'une fonction dans de nombreux
fichiers sources en C. Le script qui suit est indispensable
pour tout répertoire /usr/local/bin.
Observez bien la manière avec laquelle ce script fait appel à lui-même
et ce, de manière récursive.
#!/bin/sh
N=`basename $0` if [ "$1" = "-v" ]; then
VERBOSE="-v"
shift
fi
if [ "$3" = "" -o "$1" = "-h" -o "$1" = "-help" ]; then
echo "$N: Usage"
echo " $N [-h|-help] [-v] <regexp-search> \
<regexpr-replace> <glob-file>"
echo
exit 0
fi
T=$$replc
for i in "$@"; do
SEARCH=`echo "$S"
| sed 's,/,\\\\/,g'`
cat $i | sed "s/$SEARCH/$REPLACE/g"
> $T
if [ "$D" = "0" ]; then
if diff -q $T $i >/dev/null; then
:
else
if [ "$VERBOSE" = "-v" ]; then
echo $i
fi
cat $T > $i
fi
rm -f $T
fi
done
else
find . -type f -name "$1" | xargs $0 $VERBOSE "$S" "$R"
fi
|