next up previous contents Next:  cut et awk - Up: Scripts utiles et commandes. Previous:  grep récursif (recherche).   Table des matières  

21.7.6  Recherche et remplacement récursifs.

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 
 
S="$1"; shift; R="$1"; shift

T=$$replc 
 
if echo "$1" | grep -q /; then

    for i in "$@"; do       SEARCH=`echo "$S" | sed 's,/,\\\\/,g'` 
      REPLACE=`echo "$R" | sed 's,/,\\\\/,g'`

      cat $i | sed "s/$SEARCH/$REPLACE/g" > $T 
      D="$?"

      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 


next up previous contents Next:  cut et awk - Up: Scripts utiles et commandes. Previous:  grep récursif (recherche).   Table des matières  
1-01-2006