Supression des mots de 1, 2 et 3 caractères

Résolu
Bonjour,

Voilà je cherche à faire un script simple avec sed (par exemple, sed c'est bien ;) ) pour supprimer tous les mots de moins de 4 caractères d'un fichier texte.

Par exemple : j'ai le fichier texte dont le contenu est le suivant :

Hier Toto est partie à la chasse et a ramené du gibier

Le résultat doit être un autre fichier contenant :

Hier Toto partie chasse ramené gibier

Merci pour votre aide.

Alf

8 réponses

  1. Modérateur
    Salut,
    [tmpfs]$ echo $var
    Hier Toto est partie à la chasse et a ramené du gibier
    
    [tmpfs]$ echo $var | sed 's/\b[^ ]\{1,3\}\b//g;s/ \+/ /g'
    Hier Toto partie chasse ramené gibier
    
    [tmpfs]$
    ;-))
    -1
    1. Bonjour,

      Merci pour ce script, j'ai pas pensé utilisé le effacement arrière \b...

      Par contre il faut que je fasse 3 ou 4 passes pour avoir un fichier final dont la taille ne bouge plus.
      Et là je comprend pas pourquoi.

      Je vais attendre un peu si vous avez des idées du pourquoi du comment. Ensuite je ferais un script qui enchaine 3 ou 4 passes...

      A+

      Alf
      -1
      1. Modérateur
        Re-

        j'ai pas pensé utilisé le effacement arrière \b
        Non ça c'est les limites de mots qu'on appelle...

        Par contre il faut que je fasse 3 ou 4 passes pour avoir un fichier final dont la taille ne bouge plus.
        Et là je comprend pas pourquoi.

        Affiche ton fichier, ça sera plus simple à adapter.
        -1
        1. Re,

          En affichant le fichier je ne trouve pas pourquoi... mais bon c'est pas trop grave.

          Autre choses :

          Dans mon fichier texte je me retrouve avec plusisuers fois le même mot. En fait je voudrais ne garder qu'une occurence de chaque mot.

          Quelqu'un a-t-il une idée ?

          Merci encore de m'aider.

          Alf
          -1
          1. Modérateur
            En affichant le fichier je ne trouve pas pourquoi... mais bon c'est pas trop grave.
            Je voulais dire : "Affiche-nous ton fichier original histoire qu'on voit sa structure et qu'on y fasse des tests" ;-))
            -1
        2. RE,

          Alors, j'ai pas mal avancé. avec un sort puis un uniq j'ai bien qu'une fois chaque mot et cela va très vite.

          Jipicy,
          Mon pb maintenant c'est qu'une date au format 99/99/9999 dispartait avec le script qu tu m'as indiqué dans ton 1er post.
          VAR='Hier Toto est parti a la chasse et a ramené du gibier 12/03/2006'
          echo $VAR | sed 's/\b[^ ]\{1,2\}\b//g;s/ \+/ /g;s/^ //g'
          donne :
          Hier Toto est parti chasse ramené gibier 2006
          au lieu de :
          Hier Toto est parti chasse ramené gibier 12/03/2006

          Mais bon, si c'est un - ou un . qui remplace le / dans les format de date...

          Merci encore pour votre aide.

          Alf
          -1
          1. Modérateur
            sed 's/\b[^ .0-9/-]\{1,2\}\b//g;s/ \+/ /g;s/^ //g'
            -1
            1. Un grand merci jipicy, mais malgré tout tes efforts cela ne va pas non plus :
              il garde les mots de 1 et 2 chiffres !

              VAR='Hier Toto est parti a la chasse et a ramené du gibier 12/03/2006 1 23 454'
              echo $VAR | sed 's/\b[^ .0-9/-]\{1,2\}\b//g;s/ \+/ /g;s/^ //g'
              donne :
              Hier Toto est parti chasse ramené gibier 12/03/2006 1 23 454
              au lieu de :
              Hier Toto est parti chasse ramené gibier 12/03/2006 454

              Bon, je laisse tomber pour le moment...

              Je clos ce post.

              Merci encore pour m'avoir aider à progresser en sed et expressions régulières.

              Alf
              -1