Opérations sur chaines dans un fichier

medo -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Merci de mettre le fichier "AVANT" traitement puis "APRES" traitement , histoire qu'on s'entende bien ;-))
    0
  2. medo
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  4. medo
     
    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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. medo
     
    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
  7. medo
     
    Merci jipicy
    c'est bon, il fallit jsute remplacer 1p par '$i'p dans une boucle for
    0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    $ 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