• # C'est complétement fait pour

    Posté par  . Évalué à 2.

    perl -i -pe 's/truc a remplacer/truc de remplacement/g' monfichier
    ça, c'est un uniligne qui te le fait facilement.
    Si tu veux le faire dans un programme plus classique, un truc du genre (vite fait, hein) :

    #!/usr/bin/perl -w

    my $source_file = "/mon/chemin/vers/monfichier";
    open SOURCE, $source_file or die "can't open $source_file $!";
    while (my $line=<SOURCE>) {
    if($line =~ /contient ma chaîne/) {
    print "found";
    s/contient ma chaîne/truc de remplacement/g;
    }
    }
    close(SOURCE);


    Une bonne lecture, les articles de Linux magazine France : http://articles.mongueurs.net/magazines/
  • # sed ou vi

    Posté par  . Évalué à 3.

    Tu as deux solutions :
    * vi
    * sed
    Les deux demandent un petit apprentissage. Si c'est pour le faire une fois, je te conseille plutot vi. Si tu veux automatiser la manipulation, il va falloir te mettre à sed. Mais dans les deux cas, les expressions régulières te seront d'une grande utilité.
    quand tu ouvres un fichier avec vi, il te suffit de tapper la commande
    :1,$s/chainesource/chainedest/g
    explication :
    :1,$ parcourt le fichier de la première ligne à la dernière
    s/chainesource/chainedest change chainesource en chainedest
    /g applique la substitution à toutes les occurences

    En ce qui concerne sed, n'étant pas un spécialiste, je te renvoies plutot au man ou au net.
    • [^] # Re: sed ou vi

      Posté par  (site web personnel) . Évalué à 2.

      vi et sed c'est (presque) pareil:
      sed -e 's/ancien/nouveau/g' fichier
      • [^] # Re: sed ou vi

        Posté par  . Évalué à 1.

        Merci à tous!

        l'utilisation de sed me paraît impeccable! Cela m'évite beacoup de lignes de code...

        Par contre si je souhaite que le fichier en question soit imédiatement modifier comment puis-je faire?

        car, en fait, la commande suivante :

        sed -e 's/ancien/nouveau/g' monfichier

        me retourne en sortie standard le nouveau fichier (sans l'avoir écrit dans "monfichier")

        si je fais :

        sed -e 's/ancien/nouveau/g' monfichier > monfichier

        alors il m'écrase ce dernier.... Il y aurait-il une astuce pour ne pas passer par un fichier temporaire et écrirre directement le fichier "monfichier" à la volée.

        Enfin, c'est la cerise sur le gateau... car même sans cela je suis content d'avoir découvert cette fonction... merci encore
        • [^] # RTFM

          Posté par  (site web personnel) . Évalué à 3.

          -i

          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

          • [^] # Re: RTFM

            Posté par  . Évalué à 1.

            Parfait! faudra que je lise les man mieux que cela... j'ai pas vu ce paramètre. Merci.
      • [^] # Re: sed ou vi

        Posté par  . Évalué à 2.

        Ohh hey et emacs aussi y peux le faire hey
        Ctl-Alt-% c'est encore mieux la ! :)
      • [^] # Re: sed ou vi

        Posté par  . Évalué à 1.

        Bonjour, je voudrais faire plus ou moins la même chose mais je voudrais spécifier deux conditions:

        la première, c'est qu'il faut que la ligne commence par une séquence précise, la deuxième c'est que la séquence qui suit (la deuxième donc) ait plus d'un caractère .
        Enfin, je voudrais pouvoir insérer un "_" entre chaque lettre de cette séquence(je voudrais faire ça dans tout le fichier). est-ce réalisable (je suppose que oui, mais comment es-ce qu'on peut spécifier tout ça avec sed?)

        Merci!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.