Suprimer tout ce qu'il y a aprés un mot

paul -  
 paul -
Bonjour,

J'aimerais écrire un script permettant de supprimer tout ce qu'il y a aprés un mot.
exemple de fichier à traiter :

janvier février mars avril mai ~date
lundi mardi mercredi
un deux trois~compte

mercredi jeudi vendredi
trois six neuf
~a tester prochainement
lundi mardi

ce que ça donne si l'on supprime tout ce qu'il y a aprés le ~ :

janvier février mars avril mail
lundi mardi mercredi
un deux trois

mercredi jeudi vendredi
trois six neuf

lundi mardi

Voilà, je sais que l'on peut faire ça avec la commande sed, mais je n'y arrive pas.

Merci
Configuration: Windows Vista
Internet Explorer 7.0

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    sed -i.bak 's/~.*//' plop
    0
    1. paul
       
      Merci pour votre aide, ça marche nickel :)
      0
    2. paul
       
      Bonsoir, j'ai une autre question sur l'utilisation de la commande SED :
      supposons que je dispose de ce fichier :

      []janvier février mars avril mail~[]
      []lundi mardi mercredi~[]
      []un deux trois~[]

      mercredi jeudi vendredi
      []trois six neuf
      miracle~[]

      lundi mardi
      []mercredi jeudi samdi~[]
      []lundi mardi~[]

      comment pourrais-je le transformer en :

      DEBUT[]janvier février mars avril mail~[]
      []lundi mardi mercredi~[]
      []un deux trois~[] FIN

      mercredi jeudi vendredi
      DEBUT[]trois six neuf
      miracle~[]FIN

      lundi mardi
      DEBUT[]mercredi jeudi samdi~[]
      []lundi mardi~[]FIN

      j'aimerais enfaite ajouter les mot DEBUT et FIN .....
      Auriez vous une idée ?
      Merci
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [tmpfs]$ cat plop
    []janvier février mars avril mail~[]
    []lundi mardi mercredi~[]
    []un deux trois~[]
    
    mercredi jeudi vendredi
    []trois six neuf
    miracle~[]
    
    lundi mardi
    []mercredi jeudi samdi~[]
    []lundi mardi~[]
    
    [tmpfs]$ sed ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/M;s/\n$/FIN&/' plop
    DEBUT[]janvier février mars avril mail~[]
    []lundi mardi mercredi~[]
    []un deux trois~[]FIN
    
    mercredi jeudi vendredi
    DEBUT[]trois six neuf
    miracle~[]FIN
    
    lundi mardi
    DEBUT[]mercredi jeudi samdi~[]
    []lundi mardi~[]FIN
    
    [tmpfs]$
    ;-))
    0
    1. paul
       
      bonjour,
      Merci de me répondre.

      j'ai rentré : sed ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/M;s/\n$/FIN&/' fi.txt
      j'ai ce message d'erreur :
      sed: -e expression #1, char 32: Unknown option to 's'


      ensuite j'ai essayé : sed -e ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/M;s/\n$/FIN&/' fi.txt
      et j'ai encore ce message d'erreur :
      sed: -e expression #1, char 32: Unknown option to 's'

      L'option /M n'existe pas sur ma version de linux. En effet quand je test :
      sed ':z;N; /\n$/! bz;s/^\[.*/DEBUT&/;s/\n$/FIN&/' fi.txt

      j'obtiens :
      DEBUT[]janvier février mars avril mail~[]
      []lundi mardi mercredi~[]
      []un deux trois~[]FIN

      mercredi jeudi vendredi
      []trois six neuf
      miracle~[]FIN

      lundi mardi
      []mercredi jeudi samdi~[]
      []lundi mardi~[]FIN


      Le mot DEBUT n'est mis qu'une fois normal c'est l'option M qui permet la répétition...
      Comment pourais-je contournais le probléme ? ( ma version de linux est Linux 2.4.17acl )

      Merci
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > paul
         
        sed ':z;/^\[/!b;N; /\n$/! bz;/^\[/{s/\(.*\)\(\n$\)/DEBUT\1FIN\2/}'
        0
      2. paul > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        j'ai encore une erreur :(

        $ sed ':z;/^\[/!b;N; /\n$/! bz;/^\[/{s/\(.*\)\(\n$\)/DEBUT\1FIN\2/}' fi.txt

        sed: -e expression #1, char 60: Unknown option to 's'


        merci
        0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Dans un 1er temps essaie de rajouter un point virgule avant la dernière accolade fermante :
    sed ':z;/^\[/!b;N; /\n$/! bz;/^\[/{s/\(.*\)\(\n$\)/DEBUT\1FIN\2/;}'

    Sinon essaie le script comme suit :
    sed '
    :z
    /^\[/ !b
    N
    /\n$/ !b z
    /^\[/ {
        s/\(.*\)\(\n$\)/DEBUT\1FIN\2/
    }
    ' fichier
    
    0
    1. paul
       
      j'ai essayé le script en elevant les { } et ca marche nickel :) :) :)

      Merci beaucoup :)
      0
    2. paul
       
      Le code marche egalement en ajoutant un point virgule avant la dernière accolade fermante .

      C'est Génial :)

      Merci
      0