Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2008, 09h11   #1
Invité de passage
 
Inscription : mai 2003
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 3
Points : 0
Points : 0
Envoyer un message via ICQ à Azenet
Par défaut Modifier un texte dans les fichiers d'un répertoire

Bonjour
Je suis à la recherche d'un petit script, qui me permettrait de parcourir tous les fichiers contenus dans un répertoire, même ceux des sous-répertoires, et de changer par exemple toto par titi lorsque toto apparait dans le fichier
On m'a donné cette commande find . -type f -print | xargs grep toto pour voir là où apparaissait ce texte dans les fichiers du répertoire, mais vu le nombre d'occurence j'aimerait le modifier automatiquement
Pour info je travaille sous AIX 5.2
Merci pour votre aide !
Florent
Azenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 10h01   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 499
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 499
Points : 9 685
Points : 9 685
Bonjour,

find te permet de trouver toutes les occurences d'un fichier/répertoire répondant à certains critères. Elle peut aussi prendre un paramètre à exécuter sur les fichiers trouvés si besoin.

Trouve tout ce qui est de type fichier à partir du répertoire courant.

Code :
find . -type f -exec grep -l "toto" {} \;
permet de trouver tout les fichiers contenant la suite de lettre "toto".

Ensuite, il te faut trouver une commande permettant de remplacer une chaine par une autre dans un fichier. Ca se fait bien avec sed ou perl par exemple.
Ensuite, il te suffira de lier le find et ta commande avec xargs pour effectuer le remplacement de manière systématique.

Fais des essais dans un répertoire isolé, et postes ton code si tu n'y arrives pas.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 13h12   #3
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 313
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 313
Points : 8 596
Points : 8 596
Pourquoi ne pas faire directement :
Code :
find . -type f -exec sed -i 's/toto/titi/g' {} \;
? Le secret est dans l'option -i mais je ne sais pas si elle existe dans la commande sed d'AIX (connaissant vaguement le bousin, j'ai des doutes).
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 12h43   #4
Membre Expert
 
Avatar de narmataru
 
Inscription : décembre 2002
Messages : 1 423
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : décembre 2002
Messages : 1 423
Points : 1 491
Points : 1 491
salut,
Si tu as perl sous AIX :
Citation:
find ./dir/ -type f -name "*.txt" | xargs -n1 perl -pi -e "s/old/new/g"
Voir les sujets :
http://www.developpez.net/forums/sho...d.php?t=417509
http://www.developpez.net/forums/d98208/systemes/linux/applications/shell/faire-recherche-remplacement-sous-linux/
__________________
Reportage d'Arte sur Linux
narmataru est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h18.


 
 
 
 
Partenaires

Hébergement Web