Modifier un mot de fichiers d'un repertoire

Résolu
isagarran Messages postés 3 Statut Membre -  
isagarran Messages postés 3 Statut Membre -
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
Configuration: Windows XP
Internet Explorer 6.0
cygwin
Linux redhat 4

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    1. isagarran Messages postés 3 Statut Membre
       
      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
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,
      find . -name "*.txt" -exec sed -i 's/titi/toto/g' {} \;
      ;-))
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. isagarran Messages postés 3 Statut Membre
     
    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