Modifier un mot de fichiers d'un repertoire

Résolu/Fermé
isagarran Messages postés 3 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 1 juillet 2007 - 30 juin 2007 à 20:50
isagarran Messages postés 3 Date d'inscription samedi 30 juin 2007 Statut Membre Dernière intervention 1 juillet 2007 - 1 juil. 2007 à 09:41
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

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
30 juin 2007 à 20:58
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 samedi 30 juin 2007 Statut Membre Dernière intervention 1 juillet 2007
1 juil. 2007 à 07:09
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
1 juil. 2007 à 08:27
Salut,
find . -name "*.txt" -exec sed -i 's/titi/toto/g' {} \;
;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
1 juil. 2007 à 08:51
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 samedi 30 juin 2007 Statut Membre Dernière intervention 1 juillet 2007
1 juil. 2007 à 09:41
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