bash - grep et expressions régulières [Résolu] - Shell/Batch - Programmation
Marsh Posté le 07-05-2010 à 10:08:18
Fred999 a écrit :
|
Sauf que ton matching signifie en fait : "maprocedure + 1 caractère non alphanumérique obligatoire".
Essaie avec ça peut-être :
grep -il "create[ \t]*proc[a-zA-Z]*[ \t]*maprocedure([^a-zA-Z0-9]|$)" * |
Marsh Posté le 07-05-2010 à 10:16:14
Merci Elmoricq
Oui, le caractère non alphanumérique c'est un espace, une tabulation ou bien une fin de ligne, la fin de ligne n'est pas un caractère sous Unix ?
Marsh Posté le 07-05-2010 à 10:16:28
Enfin tout ça pour dire que ça marche pas non plus
j'avais aussi essayé
Code :
|
Marsh Posté le 07-05-2010 à 10:27:02
Bon bin encore un sujet auto-résolu
J'me suis décidé à chercher sur Google en ANGLAIS et suis tombé là-dessus :
You see, the end of line character is not included in the block of text that is searched.
et surtout : le * permet de détecter de ZERO à n occurences de l'expression.
Du coup :
Code :
|
Et là ça marche
Comme quoi il fallait en parler pour trouver... comme souvent.
Merci Elmoricq !
Marsh Posté le 07-05-2010 à 10:37:51
Hm.
En fait, j'avais testé sur mon OS et ça fonctionnait chez moi, c'est surement OS-specific (comme souvent avec ce genre d'outils).
Par contre, le problème de [^a-zA-Z0-9]*, c'est que ça match aussi 0 caractère non-alphanumérique. Si j'interprète correctement cette regexp, ça veut dire que "maprocedureEyjafjöll" matchera aussi, non ?
edit : j'confirme, en tout cas c'est comme ça que c'est interprèté chez moi
Marsh Posté le 07-05-2010 à 10:57:21
Zarbi, c'est pas très posix comme comportement. Juste par curiosité, tu es sous quel OS ?
(Slowlaris chez ouam)
Marsh Posté le 07-05-2010 à 11:00:59
En fait, la ligne
Code :
|
détecte bien les lignes comme "create procedure maprocedure"
mais pas "create procedure maprocedure as"
ce qui est finalement logique...
j'pense faire un double grep, ce sera + simple.
Marsh Posté le 07-05-2010 à 11:27:00
Ou alors tu peux tenter de passer par PERL :
perl -nle 'print $ARGV if m{create[ \t]*proc[a-zA-Z]*[ \t]*maprocedure([^a-zA-Z0-9]|$)}' * | uniq |
Marsh Posté le 07-05-2010 à 11:29:58
houla tu m'fais peur avec tes langages inconnus, pourquoi pas demander à jovalise de me faire ça en ada ?
Marsh Posté le 07-05-2010 à 11:31:07
PERL, j'utilise ça plus comme un outil pour pallier aux manques du shell que comme un langage
C'est beaucoup plus pratique et rapide dès qu'il s'agit de faire des trucs un peu foireux, et au moins t'es sûr que les regexp sont identiques quel que soit l'OS
Marsh Posté le 07-05-2010 à 11:40:12
Hum si j'y arrive toujours pas je testerai, thx en tout cas
Marsh Posté le 07-05-2010 à 10:03:16
Messieurs-dames,
Je code actuellement une moulinette chargée de récupérer le cartouche de présentation de procédures stockées dans un répertoire, à partir de la liste des procédures stockées récupérées en base. Pour cela, j'effectue une recherche sur le nom de la procédure dans le répertoire les contenant.
Les déclarations des procédures peuvent être sous différentes formes :
create proc maprocedure
create proc maprocedure as
create proc maprocedure @toto int, @titi int
create procedure maprocedure @toto int, @titi int
Avec commes variantes : majuscules et minuscules, espace(s) et tabulation(s).
Voici donc, après réflexion, la commande que je devrais utiliser :
Comme vous l'aurez compris, ça marche pas : je n'arrive pas à détecter la fin de ligne derrière le nom de la procédure.
Ainsi, si la ligne contient "create proc maprocedure as", ça fonctionne, mais pas si la ligne ne contient que "create proc maprocedure".
J'ai effectué des tests avec \n, avec $, mais sans résultat.
Si quelqu'un a une idée...
Merci d'avance.
Message édité par Fred999 le 07-05-2010 à 10:28:24