Mephisto Posté(e) le 27 juin 2008 Partager Posté(e) le 27 juin 2008 Bonjour j'essai de me mettre aux regexprs, mais j'ai un peu de mal sur le fichier suivant: 1213954319 salut 84 test toto pouet 2008-01-26 14h30 toto 21 testdate 2008-01-26 14h30 20080130 14-30-15 test 42 testdate 20080130 14-30-15 2008 : 06 : 21 1425 totototo 25 testdate 208 : 06 : 21 1425 2008/03/30 15:30 pouet 420 testdate 2008/03/30 15:30 1213953789 pouet 33 texte 5 1213953827 truc 42 texte2 1213953837 sodomie 84 texte2 1213954244 coit bucal 21 texte2 1213954319 lapidation 42 test toto pouet 2008-01-26 14h30 tamaman 18 testdate 2008-01-26 14h30 2008 : 06 : 21 1425 champignons 15 testdate 208 : 06 : 21 1425 2008/03/30 15:30 fallout 0 testdate 2008/03/30 15:30 2008-01-26 14h30 berger 42 testdate 2008-01-26 14h30 20080130 14-30-15 pankake volant 84 testdate 20080130 14-30-15 2008 : 06 : 21 1425 encrier 21 testdate 208 : 06 : 21 1425 2008/03/30 15:30 toto 33 testdate 2008/03/30 15:30 1213953789 faciale 25 texte 5 1213953827 pouet 21 texte 8 1213953837 pouet 42 texte2 1213954288 pouet 84 texte42 bon ceux qui l'ont pas devine, c'est des tab qui trainent au milieu j'ai entre quatre et cinq colonnes par lignes, suivant si l'evenement donne l'est avec un timestamp, ou une date qui doit pouvoir etre formatte un peu n'importe comment, sur deux colonnes bref... pour l'instant, j'essai de grep suivant le contenu de l'avant derniere colonne j'ai tente ma chance avec les lignes de commande suivantes: grep "[^\t]42[^\t][a-zA-Z0-9:_/\-\ ]*$" fichier grep "[^\t]42[^\t].[a-zA-Z0-9:_/\-\ ]*$" fichier et quelques derives mais j'ai jamais ce que je cherche a obtenire... pourquoi selon vous ? a ce que j'ai compris des regexp, ma premiere commande est sence marche... mais ce n'est pas le cas, donc si vous comprenez ou je me suis trompe, ca pourrait m'arranger merci pour votre aide ! edit: euh, ben en fait, je viens de trouver (enfin, pas exactement) si a la fin de mon [a-zA-Z....] je met '\ ', j'ai mon probleme si j'enleve le backspace, il me fait un 'invalid range end', mais si j'enleve le backspace et que je met l'espace ailleurs, ca marche presque la solution temporaire est donc la suivante: grep "[^\t]42[^\t].[a-zA-Z0-9:_ /\-]*$" fichier par contre, si le champ contient 420, il est grep (alors que je demande \t42\t pour etre sur d'avoir uniquement des 42 dans ma selection)... Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 27 juin 2008 Partager Posté(e) le 27 juin 2008 [^\t] me semble bizarre. Essaye plutôt grep -E "\s+42\s+[\w:/- ]*$" fichier . Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 27 juin 2008 Auteur Partager Posté(e) le 27 juin 2008 avec [\w:/- ], j'ai un invalid range end et en bougeant l'espace, le retour est nul... Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 27 juin 2008 Partager Posté(e) le 27 juin 2008 Ah oui, j'avais oublié que gnu grep ne permettait pas d'utiliser les regex perl. grep --color -E "[[:space:]]42[[:space:]]+[[:print:]]*$" devrait fonctionner. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 27 juin 2008 Auteur Partager Posté(e) le 27 juin 2008 manifique! j'etais pas au courrant qu'il y avait plusieurs syntaxes differentes en fonction de grep ou de perl (en esperant qu'il n'y en ai pas beaucoup d'autres...) ces [[:space:]] ou [[:print:]], ca ne s'utilise que sur le grep alors ? mais donc (pour etre sur), \s \S \w \W ne sont pas gere par grep ?! (j'ai pas foutu [a-zA-Z0-9...] sans raisons..., mais je pensais m'etre trompe tout seul comme un grand...) en tout cas, merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 27 juin 2008 Partager Posté(e) le 27 juin 2008 j'etais pas au courrant qu'il y avait plusieurs syntaxes differentes en fonction de grep ou de perl (en esperant qu'il n'y en ai pas beaucoup d'autres...) Il y a deux familles principales, les PCRE et les regexp POSIX. Les PCRE étant bien plus pratiques à utiliser, c'est implémenté dans beaucoup de langages au point que je l'utilisais aussi pour grep.ces [[:space:]] ou [[:print:]], ca ne s'utilise que sur le grep alors ? Non c'est POSIX. cf la page de man de grep.mais donc (pour etre sur), \s \S \w \W ne sont pas gere par grep ?! \w si.en tout cas, merci ! Pas de soucis. Lien vers le commentaire Partager sur d’autres sites More sharing options...
djuke Posté(e) le 30 juin 2008 Partager Posté(e) le 30 juin 2008 j'etais pas au courrant qu'il y avait plusieurs syntaxes differentes en fonction de grep ou de perl (en esperant qu'il n'y en ai pas beaucoup d'autres...) Il y a deux familles principales, les PCRE et les regexp POSIX. Les PCRE étant bien plus pratiques à utiliser, c'est implémenté dans beaucoup de langages au point que je l'utilisais aussi pour grep. grep -P ( ou grep --perl-regexp) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.