18 mars 2003

En ligne de commande, comment substituer une chaine par une autre dans plusieurs fichiers ?

Autant le dire tout de site, il n'existe pas de commande magique permettant de réaliser une substitution sur plusieurs fichiers de manière simplet et interactive.

Cela dit, rien n'est perdu pour autant, les commandes Unix/Linux sont suffisamment riches pour réaliser un petit script qui fera l'affaire.

En voici un parmi tant d'autres :

#!/bin/sh

echo "Repertoire:"
ead -r LECHEMIN
echo "Dans fichiers/types:"
read -r LESTYPES
echo "Rechercher:"
read -r SEARCH
echo "Remplacer avec:"
read -r REPLACE

if [[ ! -d ${LECHEMIN} ]]
    then
    echo "Repertoire [$LECHEMIN] incorrect"
    exit 1
fi
if [[ -z ${LESTYPES} ]]
    then
    echo "Fichiers/Types vide"
    exit 2
fi
if [[ -z ${SEARCH} ]]
    then
    echo "Masque de Recherche vide"
    exit 3
fi
if [[ -z ${SEARCH} ]]
    then
    echo "Masque de Remplacement vide"
    exit 4
fi

lesfichiers=`find ${LECHEMIN} -name "${LESTYPES}"`
for fichier in $lesfichiers;
  do
  cat $fichier | sed s/${SEARCH}/${REPLACE}/g > $fichier.s
  if [[ ${?} -eq 0 ]]
      then
      mv $fichier.s $fichier
      echo "Replace in $fichier"
  fi
done;

exit 0;

Aucun commentaire:

Enregistrer un commentaire