Modifier un mot de fichiers d'un repertoire

Résolu
isagarran Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
isagarran Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, j'ai un très faible niveau de scripting. Je cherche comment à partir d'un point d'une arborescence donnée (et sous répertoires), je pourrais modifier tous les fichiers contenant une chaine de caractère donnée par une autre chaine de caractères.
En clair, remplacer tous les TITI, qui se trouve dans des fichiers d'un répertoire, par TUTU.
Ce sera à exécuter sous Linux mais je teste sous Cygwin (windows XP).
Merci beaucoup,
jp
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,
lami20j@deb:~$ ls -l /home/lami20j/aaa/
total 12
-rw-r--r-- 1 lami20j lami20j 5 2007-06-30 20:56 a.txt
-rw-r--r-- 1 lami20j lami20j 5 2007-06-30 20:56 b.txt
-rw-r--r-- 1 lami20j lami20j 5 2007-06-30 20:56 c.txt
lami20j@deb:~$ cat /home/lami20j/aaa/*.txt
titi
titi
titi
lami20j@deb:~$ sed -i 's/titi/toto/' /home/lami20j/aaa/*.txt
lami20j@deb:~$ cat /home/lami20j/aaa/*.txt
toto
toto
toto
lami20j@deb:~$
1
isagarran Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci de ta réponse rapide,
Le sed me permet de modifier une ou plusieurs occurences de titi dans UN fichier tel que tu me l'as démontré (en fait plusieurs m'intéresse. c'est l'option g, je crois).
Ce qu je voudrais, c'est effectuer cette opération de manière récursive à partir d'une arborescence et le faire dans tous les sous-répertoires, pour tout les fichiers.

merci,
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,
find . -name "*.txt" -exec sed -i 's/titi/toto/g' {} \;
;-))
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

tous les fichiers contenant une chaine de caractère donnée par une autre chaine de caractères.
En clair, remplacer tous les TITI, qui se trouve dans des fichiers d'un répertoire, par TUTU.


Bon, pour ce que tu as demandé ej t'ai donné un exemple :-))

Pour ce que tu veux en réalité, jipicy a adapté la réponse :-)

Pour conclure :-DD
l'option g que je l'appellerais plutôt modificateur de regex permet de remplacer plusieurs occurences
si on utilise la regex sans ce modificateur ce n'est que la 1ère occurence de chaque ligne qui sera remplacer
en combinaison avec find on applique la commande à toute les fichiers .txt d'une arborescence
Voici pour étudier et comprendre (à utiliser find pour l'arborescence)
lami20j@deb:~/aaa$ cat /home/lami20j/aaa/*.txt
titi titi
titi
titi titi titi
titi titi
titi
titi titi titi
titi titi
titi
titi titi titi
lami20j@deb:~/aaa$ sed -i 's/titi/toto/' /home/lami20j/aaa/*.txt
lami20j@deb:~/aaa$ cat /home/lami20j/aaa/*.txt
toto titi
toto
toto titi titi
toto titi
toto
toto titi titi
toto titi
toto
toto titi titi
lami20j@deb:~/aaa$ cat /home/lami20j/aaa/*.txt
titi titi
titi
titi titi titi
titi titi
titi
titi titi titi
titi titi
titi
titi titi titi
lami20j@deb:~/aaa$ sed -i 's/titi/toto/g' /home/lami20j/aaa/*.txt
lami20j@deb:~/aaa$ cat /home/lami20j/aaa/*.txt
toto toto
toto
toto toto toto
toto toto
toto
toto toto toto
toto toto
toto
toto toto toto
lami20j@deb:~/aaa$
--
lami20j
0
isagarran Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci à vous deux pour les réponses. C'et impeccable.

(find . -name "*.txt" -exec sed -i 's/titi/toto/g' {} \;) permet bien de modifier tous les fichiers d'une arborescence.
0