[ksh] expression regulière sur longueur chaine

expression regulière sur longueur chaine [ksh] - Shell/Batch - Programmation

Marsh Posté le 24-04-2009 à 17:16:42    

Bonjour,
 
 
J'ai des fichiers qui se présentent sous cette forme :
 
ABCDEF1508GV12AW090423200138.FILE
 
En rouge c'est l'information que je parse et que j'utilise dans mon script. Ensuite dans mon traitement je fais ceci à un moment :
 

Code :
  1. var=1508
  2. ls /rep/ | grep $var


 
Mais parfois je tombe sur des fichiers qui peuvent contenir la chaine parsée (ici dans l'exemple "1508" ) ailleurs dans le nom du fichier mais pas à l'emplacement où je suis censé le parser. Du coup le grep renvoie 0 pour "one or matches found" et ça me pose problème.
 
Exemple : ABCDEF2122GV12AW090423150838.FILE
 
Je connais un peu les expressions régulières mais je n'ai pas trouvé de quoi faire ce que je souhaitais. Il faudrait que je puisse spécifier la chaine à rechercher en précisant le nombre de caractères avant et après. Sachant que la longueur du nom du fichier est fixe.
 
 
Merci d'avance pour votre aide!


Message édité par Tonio94 le 24-04-2009 à 17:33:42
Reply

Marsh Posté le 24-04-2009 à 17:16:42   

Reply

Marsh Posté le 24-04-2009 à 17:33:15    

Je me réponds à moi même, je n'avais pas bien cherché :
 
Il faut utiliser une regexp de ce type là :
 
[A-Z]{6}[0-9]{4}
 
et je remplace [0-9] par $var la valeur à rechercher. C'était tout simple lol

Reply

Marsh Posté le 28-05-2009 à 16:30:24    

:sweat:  Besoin d'aide en fait !
 
Ca ne fonctionne pas exactement comme je l'espérais.
 
Voici l'expression

Code :
  1. var=2009
  2. ls /rep/ | grep -E [A-Z]{6}[${var}]{4}


 
 
Le soucis étant qu'il me trouve toutes les expressions qui match mais même si $var est dans le désordre, ce qui ne va plus du tout !  :whistle:  
 
 

Reply

Marsh Posté le 28-05-2009 à 17:34:45    

Si tu recherches que $var, remplace "[${var}]{4}" par "$var"

Reply

Marsh Posté le 28-05-2009 à 17:48:57    

J'ai essayé déjà mais ça ne fonctionne pas non plus, il ne match rien  :/

Reply

Marsh Posté le 28-05-2009 à 22:00:09    

use perl luke
si t'en es à te trainer du ksh, t'aurais jamais un GNU grep, alors autant utiliser un vrai outil.

Reply

Marsh Posté le 30-05-2009 à 19:59:04    

Tonio94 a écrit :

:sweat:  Besoin d'aide en fait !
 
Ca ne fonctionne pas exactement comme je l'espérais.
 
Voici l'expression

Code :
  1. var=2009
  2. ls /rep/ | grep -E [A-Z]{6}[${var}]{4}


 
 
Le soucis étant qu'il me trouve toutes les expressions qui match mais même si $var est dans le désordre, ce qui ne va plus du tout !  :whistle:


 

Code :
  1. ls /rep/ | grep -E "^[A-Z]{6}$var"


 

Taz a écrit :

use perl luke
si t'en es à te trainer du ksh, t'aurais jamais un GNU grep, alors autant utiliser un vrai outil.


Et s'il ne connait pas le perl ? C'est pas bien malin de lui dire "recommence tout à zéro dans un autre langage" sans même lui donner la moindre indication sur la façon de le résoudre dans ledit langage. De plus, s'il l'a fait en ksh c'est qu'il a probablement besoin de le faire en ksh. Par ailleurs même si son grep ne sait pas gérer les regexp, c'est tout à fait possible de le résoudre autrement et toujours en ksh.
 
Ceci dit, (pour Tonio94), si t'as l'occasion de te mettre à Perl ou Python ou Ruby, n'hésite pas. Ce sont des langages à la fois souples mais nettement plus puissants que le shell (perso je préfère Python)

Message cité 1 fois
Message édité par Sve@r le 30-05-2009 à 20:05:59

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 31-05-2009 à 10:22:05    

Sve@r a écrit :


 

Code :
  1. ls /rep/ | grep -E "^[A-Z]{6}$var"


 


 

Sve@r a écrit :


Et s'il ne connait pas le perl ? C'est pas bien malin de lui dire "recommence tout à zéro dans un autre langage" sans même lui donner la moindre indication sur la façon de le résoudre dans ledit langage. De plus, s'il l'a fait en ksh c'est qu'il a probablement besoin de le faire en ksh. Par ailleurs même si son grep ne sait pas gérer les regexp, c'est tout à fait possible de le résoudre autrement et toujours en ksh.
 
Ceci dit, (pour Tonio94), si t'as l'occasion de te mettre à Perl ou Python ou Ruby, n'hésite pas. Ce sont des langages à la fois souples mais nettement plus puissants que le shell (perso je préfère Python)


Apprendre un bout de perl, ça risque d'être plus jouable que d'installer GNU perl sur tout un parc de serveurs de productions ... comme je le disais. J'ai ce problème tous les jours, et perl, par sa présence par tout, même sur les unix à la con, c'est le shell le plus portable au monde.

Reply

Marsh Posté le 03-06-2009 à 13:53:39    

Oui bien vu Sve@r et Taz, c'est bien ça la regexp. Je l'avais trouvé entre temps c'était tout bête mais je n'ai pas pris le temps de la poster.

 

Donc c'est bien ça :

 
Code :
  1. grep -E ^[A-Z]{6}$var
 

Je connais Perl mais ne le maitrise pas, cela ne m'empêche nullement d'utiliser un bout de code en Perl dans mes scripts, quand cela est justifié bien entendu, c'est à dire soit au niveau pratique soit au niveau performance et comme effectivement il est présent partout... ;)

 

Ruby je connais mais il faut le déployer, c'est l'inconvénient, tout comme Python j'imagine.

Message cité 1 fois
Message édité par Tonio94 le 03-06-2009 à 13:55:08
Reply

Marsh Posté le 07-06-2009 à 10:36:48    

Tonio94 a écrit :

Ruby je connais mais il faut le déployer, c'est l'inconvénient, tout comme Python j'imagine.


Non, Python 2.5 est intégré dans toutes les distrib Linux actuelles.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed