Sed

Résolu
Bonjour,

J'ai une liste de fichiers >300 ,je veux remplace un mot a l'interrieur de tous ces fichier par la commande sed

for i in listdeficier do

cat $i|sed "s/ABCD/DEF/g"

qlq a une idée ?

Merci
Configuration: Windows XP / Firefox 3.6

8 réponses

  1. Modérateur
    Ok, donc effectivement il faudra passer par un script ;-\

    #! /bin/sh 
    
    #set -xv 
    
    cd /chemin/rep 
    for i in * 
    do  
    sed 's/ABC/DEF/g' "$i" > "tmp_$i" && mv "tmp_$i" "$i" 
    done


    $ man woman
    Il n'y a pas de page de manuel pour woman.

    GNU/Linux : Gnu/Linux is Not Ubuntu !
    1. C'est un Unix AIX :AIX 5300-09-02-0849

      Pour la version du sed je ne peux pas te dire.....
      1. je l'ai executer telle qu'elle est sous mon chemin voila ce que j'ai eu :

        sed -is 's/ABCD/DEF/' *fichier
        sed: Not a recognized flag: i
        Usage: sed [-n] Script [File ...]
        sed [-n] [-e Script] ... [-f Script_file] ... [File ...]
        1. Modérateur
          Quel système d'exploitation ? Unix ou Linux ?

          Quelle version de sed ?
      2. Modérateur
        Exemple beaucoup plus parlant :

        [reptest]$ ls -1
        fichier1
        fichier2
        fichier3
        
        [reptest]$ cat fichier1
        Ligne 1 fchier1
        Ligne 2 fchier1
        Ligne 3 fchier1
        Ligne 4 fchier1
        Ligne 5 fchier1
        Ligne 6 fchier1
        Ligne 7 fchier1
        Ligne 8 fchier1
        Ligne 9 fchier1
        Ligne 10 fchier1
        
        [reptest]$ cat fichier2
        Ligne 1 fchier2
        Ligne 2 fchier2
        Ligne 3 fchier2
        Ligne 4 fchier2
        Ligne 5 fchier2
        Ligne 6 fchier2
        Ligne 7 fchier2
        Ligne 8 fchier2
        Ligne 9 fchier2
        Ligne 10 fchier2
        
        [reptest]$ cat fichier3
        Ligne 1 fchier3
        Ligne 2 fchier3
        Ligne 3 fchier3
        Ligne 4 fchier3
        Ligne 5 fchier3
        Ligne 6 fchier3
        Ligne 7 fchier3
        Ligne 8 fchier3
        Ligne 9 fchier3
        Ligne 10 fchier3
        
        [reptest]$ sed -is 's/Ligne 5/blablabla/' fich*
        
        [reptest]$ cat fichier1
        Ligne 1 fchier1
        Ligne 2 fchier1
        Ligne 3 fchier1
        Ligne 4 fchier1
        blablabla fchier1
        Ligne 6 fchier1
        Ligne 7 fchier1
        Ligne 8 fchier1
        Ligne 9 fchier1
        Ligne 10 fchier1
        
        [reptest]$ cat fichier2
        Ligne 1 fchier2
        Ligne 2 fchier2
        Ligne 3 fchier2
        Ligne 4 fchier2
        blablabla fchier2
        Ligne 6 fchier2
        Ligne 7 fchier2
        Ligne 8 fchier2
        Ligne 9 fchier2
        Ligne 10 fchier2
        
        [reptest]$ cat fichier3
        Ligne 1 fchier3
        Ligne 2 fchier3
        Ligne 3 fchier3
        Ligne 4 fchier3
        blablabla fchier3
        Ligne 6 fchier3
        Ligne 7 fchier3
        Ligne 8 fchier3
        Ligne 9 fchier3
        Ligne 10 fchier3
        
        [reptest]$

        ;-))
        1. Oui tout mes fichiers sont dans le meme rep. et mon petit script aussi.
          1. Merci pour ta reponse rapide !

            Mais voila ce que j'ai :

            set -vx
            for i in list.txt do

            cat $i|sed 's/ABC/DEF/g' $i
            done

            A l'execution j'ai :

            Syntax error at line 5 : `cat' is not expected.

            une idée ?

            Merci
            1. Modérateur
              Ta liste de fichier est dans un fichier texte ?
              Lesdits fichiers (ceux de la liste) sont dans le même répertoire que le script ?

              Sinon ma commande est faite pour être lancée depuis un terminal (sans passer par un script et sans boucle) à conditions d'avoir un dénominateur commun aux fichiers à prendre en compte (par exemple *.txt).
          2. Modérateur
            Salut,

            sed -is 's/ABC/DEF/g' fichier*

            Où fichier* est à remplacer par le terme adéquat (expansion comprise).