Remplacer ligne dans fichier

Remek -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour a tous,

j'ai une multitude de fichiers dont j'aimerais remplacer certaines lignes de maniere simple. Pour etre plus clair, disons que dans mes fichiers j'ai plusieurs fois la ligne suivante:

1 2 3 4 5 ! liste des composants

et je souhaiterais remplacer chaque occurence par:

6 7 8 9 ! liste des composants

J'ai essaye avec SED et je me suis pas mal casse la tete, mais en vain...

Quelqu'un aurait-il une solution ?

Un grand merci d'avance !

Remek
Configuration: Windows Vista
Firefox 3.5.5

6 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Ben pourtant c'est sed qui est le plus adapté à ton besoin. Un truc du genre :

    (mando@aldur) (~) $ cat plop.txt
    1 2 3 4 5 bzbadbda vavaava
    1 2 3 4 5 bzbadbda vavaava
    1 2 3 4 5 bzbadbda vavaava
    1 2 3 4 5 bzbadbda vavaava
    1 2 3 4 5 bzbadbda vavaava
    1 2 3 4 5 bzbadbda vavaava
    
    (mando@aldur) (~) $ sed -i 's/1 2 3 4 5/6 7 8/g' plop.txt
    
    (mando@aldur) (~) $ cat plop.txt
    6 7 8 bzbadbda vavaava
    6 7 8 bzbadbda vavaava
    6 7 8 bzbadbda vavaava
    6 7 8 bzbadbda vavaava
    6 7 8 bzbadbda vavaava
    6 7 8 bzbadbda vavaava


    Ensuite il suffit d'appliquer ton sed au bons fichiers et c'est plié.

    Bonne chance
    0
  2. Remek
     
    Oui j'avais effectivement pense a faire ca, mais le probleme c'est que je n'ai jamais la meme liste de chiffres. Y-a-t'il un moyen de dire a SED de remplacer uniquement les lignes contenant "bzbadbda vavaava" dans ton exemple?

    Merci pour le coup de pouce !
    0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bah sed supporte les expressions régulières, donc après tu peux tout à fait généraliser le "1 2 3 4 5" en conséquence. Si tu me donnais un exemple d'un fichier et du résultat que tu souhaites obtenir, ce serait sans doute plus clair pour moi.

    Bonne chance
    0
  4. Remek
     
    En gros pour etre plus clair, j'aimerais dire a SED de scanner mes fichiers et de remplacer toutes les lignes qui contiennent l'expression "liste des composants" par quelque chose d'autre.

    Par exemple, si mon fichier est :

    3 76 5 2 6 ! liste des composants
    f g u e
    ffh
    23 65 87 ! liste des composants
    dgfhhd
    gh
    48763 3456 ! liste des composants

    j'aimerais pouvoir obtenir :

    1 2 3 4 ! liste des composants
    f g u e
    ffh
    1 2 3 4 ! liste des composants
    dgfhhd
    gh
    1 2 3 4 ! liste des composants

    Un grand merci encore !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jivef Messages postés 1024 Statut Membre 306
     
    Bonjour,
    En fait, tu peux utiliser les expressions régulières.
    Tu as dans ton cas des lignes commençant par un chiffre, avec éventuellement un deuxième chiffre collé, puis un ou des espaces et d'autres chiffres , la séquence se terminant par !.
    Ce serait quelque chose comme :
    [0-9]*! liste des composants
    donc avec sed : tu mettras comme argument
    "/[0-9]*! liste des composants/1 2 3 4 ! liste des composants/g"

    Donc quelque chose comme :
    cat monfichier | sed -e "s/^[0-9]*! liste /1 2 3 4 ! liste/g" > monnouveaufichier

    Est-ce que cela résoud ton problème ?
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    [tmpfs]$ cat plop
    3 76 5 2 6 ! liste des composants
    f g u e
    ffh
    23 65 87 ! liste des composants
    dgfhhd
    gh
    48763 3456 ! liste des composants
    
    [tmpfs]$ sed -i.bak 's/.*\(! .*\)/1 2 3 4\1/' plop
    
    [tmpfs]$ cat plop
    1 2 3 4! liste des composants
    f g u e
    ffh
    1 2 3 4! liste des composants
    dgfhhd
    gh
    1 2 3 4! liste des composants
    
    [tmpfs]$

    ;-))
    0