Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1523 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Récupérer toutes les occurences d'un mot..

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer toutes les occurences d'un mot..

n°839790
p-seeker23
Posté le 31-08-2006 à 16:50:11  profilanswer
 

Salut la communauté,
 
Je veux récupérer toutes les occurences de mots commençant par TTP.. dans un fichier texte.
Je suis sous Solaris. Le sed 's/.*\(TTP.*\).*/\1/g' ne marche pas car sed a une attitude maximaliste : il va essayer de capturer le maximum de texte correspondant au pattern TTP.* et donc il me retourne tout ce qui vient après le mot commençant par TTP jusqu'à la fin de la ligne au lieu du mot tout seul.
 
Qq1 a une idée ?
 
Merci.

mood
Publicité
Posté le 31-08-2006 à 16:50:11  profilanswer
 

n°839887
franceso
Posté le 01-09-2006 à 09:05:28  profilanswer
 

je connais pas super bien sed, mais en perl je ferais ça:

perl -ne 's/.*(TTP\S+).*/$1/g; print;'


 
C'est ça que tu voulais ?


---------------
TriScale innov
n°839916
p-seeker23
Posté le 01-09-2006 à 12:15:14  profilanswer
 

Merci franceso pour ta réponse.
Je connais rien à perl, mais ta commande ne marche pas quand le mot finit en un caractère non alphanumérique.
Par exemple ta commande retourne la ligne :  
 

TTPConnection;)[Ljconnect/srv/data/..


Alors que tout ce que je veux capturer sur cette ligne est : TTPConnection.
 
J'aurais pensé que mon bonheur serait dans :

perl -ne 's/.*(TTP[:alnum:]+)[^:alnum:].*/$1/g; print;'


mais je ne sais pas pourquoi cette version ne parche pas non plus..
 
J'ai trouvé une solution plus laborieuse avec sed :  
 

egrep "TTP[A-Za-z0-9]" mon_fichier | sed -e 's/\(TTP[A-Za-z0-9]\{1,\}\)/\1^M/g' | sed -e 's/^.*\(TTP[A-Za-z0-9]\{1,\}\).*$/\1/g'


Le ^M résulte de Cntr-V-Enter.
Ca ne retourne pas les mot exactement égaux à "TTP", mais tout le reste. Ca me va, mais si qq1 peut encore améliorer ça, ça m'intéresserait !

Message cité 1 fois
Message édité par p-seeker23 le 01-09-2006 à 12:20:16
n°839918
p-seeker23
Posté le 01-09-2006 à 12:20:07  profilanswer
 

En remplaçant le savant \{1,\} par un simple *, j'ai toutes les occurences.  
C'est exactement ce que je veux, mais ça me semble bien laborieux (et déconseillé en cas de gros fichier à parser).
Donc je suis toujours preneur d'une solution plus concise/efficace !  ;)

n°839931
franceso
Posté le 01-09-2006 à 13:43:30  profilanswer
 

p-seeker23 a écrit :

ta commande ne marche pas quand le mot finit en un caractère non alphanumérique.


Alors essaie

perl -ne 's/.*(TTP\w*).*/$1/g; print;'


 
Je te propose ça parce que c'est quelque chose de proche de ton essai initial, mais je ne sais pas si ça fera exactement ce que tu veux. Par exemple tu risques d'avoir des problèmes s'il y a plus de 2 TTP* par ligne, ou si au contraire certaines lignes ne contiennent pas de mots en TTP.
 
Si tu me donnes plus de détails sur ce que tu veux faire et sur le type d'entrée que tu as, je pourrai sans doute te donner plus de conseils...


---------------
TriScale innov
n°839945
p-seeker23
Posté le 01-09-2006 à 14:28:05  profilanswer
 

Cette nouvelle mouture marche parfaitement, sauf qu'elle ne récupère qu'une seule occurence par ligne (d'où le ^M dans mon sed).
Dans le fichier exemple suivant :  

TTP
TTP;
TTPaz1 aaa (TTP1_bbb); TTP2ds
bbb TTPhd3B aaa ;
bbb TTPhd5B.. ;
bbb aaa/TTPhd5B/..
bbb aaa/TTPhd


sur la 3ème ligne, seul TTP2ds est récupéré.
Ce fichier résumes toutes les situations où les noms TTP* apparaissents dans mon fichier..
 
Merci pour tes efforts !  :jap:

n°839960
franceso
Posté le 01-09-2006 à 15:58:05  profilanswer
 

nouvel essai:

perl -ne 'while (/^(.*\b)(TTP\w*).*$/){print $2."\n"; $_=$1}'


 
ca a l'air de marcher sur ton fichier d'exemple.


---------------
TriScale innov
n°840713
p-seeker23
Posté le 04-09-2006 à 15:51:55  profilanswer
 

Ca marche à la perfection !  :wahoo:  
Merci beaucoup !  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Récupérer toutes les occurences d'un mot..

 

Sujets relatifs
Outlookexpress et Tele2 recupérer messages envoyés !Outlookexpress et Tele2 recupérer messages envoyés !
Comment récupérer ce genre de vidéo ?Récupérer ses données
[Problème avec Ccleaner, récupérer un fichier ][shell]recupérer l 'état d une connexion?
récupérer des datagrammesComment recuperer les videos sur le site ina.fr?
Récupérer les mails d'un compte thunderbirdrecuperer fichiers sur une partitoin ext3 avec autopsy
Plus de sujets relatifs à : Récupérer toutes les occurences d'un mot..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR