Supression des mots de 1, 2 et 3 caractères [Résolu/Fermé]

Messages postés
39
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2013
- - Dernière réponse : bong03
Messages postés
39
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2013
- 10 oct. 2008 à 16:32
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
Afficher la suite 

8 réponses

Messages postés
43477
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
17 mars 2018
4540
-1
Merci
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]$
;-))
Messages postés
39
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2013
3
-1
Merci
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
Messages postés
43477
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
17 mars 2018
4540
-1
Merci
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.
Messages postés
39
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2013
3
-1
Merci
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
jipicy
Messages postés
43477
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
17 mars 2018
4540 -
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" ;-))
Messages postés
39
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2013
3
-1
Merci
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
Messages postés
43477
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
17 mars 2018
4540
-1
Merci
sed 's/\b[^ .0-9/-]\{1,2\}\b//g;s/ \+/ /g;s/^ //g'
Messages postés
39
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2013
3
-1
Merci
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
Messages postés
39
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2013
3
-1
Merci
Message clos.