Opérations sur chaines dans un fichier

Bonjour,
J'ai un fichier 1 où j'ai par exemple: mot1 mot2 mot3
Je souhaite faire un traitement sur un fichier 2 où je souhaite:
- remplacer mot1 par mot1' dans la chaine: "salut... mot1 ... toto"
- supprimer les lignes qui contiennent: "bonjour... mot2... au revoir" et "bonjour... mot2... coucou"
les chaines entourant mot2 et mot3 peuvent etre differentes.
Avez-vous une idée de comment le faire? j'ai essayé d'utiliser awk ou sed mais j'ai pas su comment !
Merci pour votre aide
Configuration: Windows XP
Firefox 3.5

7 réponses

  1. Modérateur
    Salut,

    Merci de mettre le fichier "AVANT" traitement puis "APRES" traitement , histoire qu'on s'entende bien ;-))
    0
    1. Merci pour ta réponse
      c'est vrai, c'est pas tres clair

      fichier AVANT:
      salut... mot1 ... toto
      bonjour... mot2... au revoir
      bonjour... mot3... coucou"

      fichier APRES:

      salut... UnAutreMot ... toto

      mot1, mot2 et mot3 doivent etre lus d'un autre fichier
      0
      1. Modérateur
        mot1, mot2 et mot3 doivent etre lus d'un autre fichier
        Ils sont lus comment ? Séquentiellement ?
        Il n'y a que ces mots dans le fichier ?
        mot1 est toujours à changer et les 2 autres à effacer ?
        0
        1. mot1, mot2 et mot3 sont lus je suppose séquentiellement via awk par exemple, mais si tu as une autre solution, je suis preneur. C'est un 2eme fichier où il y a mo1 mot2 mot3 mot4 .. etc sur une seule ligne ou sur des lignes différentes (je peux choisir)
          le 1er mot dans le fichier est toujours à remplacer
          la présence d'un mot parmi tous les autres impliquent la suppression de la ligne qui le contient
          0
          1. Modérateur
            Désolé je ne vois pas comment faire, y'a un truc qui m'échappe ;-((

            Peut être comme ça :
            [trash]$ cat plop
            salut... mot1 ... toto
            bonjour... mot2... au revoir
            bonjour... mot3... coucou"
            
            [trash]$ cat toto
            mot1
            mot2
            mot3
            
            [trash]$ var="$(sed -n '1p' toto)"
            
            [trash]$ sed -i.bak '/'"$var"'/!d; s//UnAutreMot/' plop
            
            [trash]$ cat plop
            salut... UnAutreMot ... toto
            
            [trash]$
            0
        2. merci
          ça répond à la moitié du probleme puisque j'ai oublié de préciser que le fichier plop contient d'autres lignes qui doivent rester inchangées.
          du coup si j'arrive à utiliser une variable dans la commande sed, le probleme sera résolu, du genre:
          for (i=1;i<4;i++)
          {
          var="$(sed -n 'ip' toto)";
          sed -i.bak '/'"$var"'/d;
          }
          donc, comment remaplcer 1p par ip ?
          0
          1. Merci jipicy
            c'est bon, il fallit jsute remplacer 1p par '$i'p dans une boucle for
            0
            1. Modérateur
              $ cat plop
              salut... mot1 ... toto
              blablabla
              bonjour... mot2... au revoir
              blabla
              bonjour... mot3... coucou"
              
              $ cat toto
              mot1
              mot2
              mot3
              
              $  while read line;do sed -i "/$line/d" plop;done < <(sed -n '1!p' toto) &&
              > var="$(sed -n '1p' toto)"; sed -i "s/${var}/UnAutreMot/" plop
              
              $ cat plop
              salut... UnAutreMot ... toto
              blablabla
              blabla
              blabla
              
              $
              ;-))
              0