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 :
Code :
- grep -il "create[ \t]*proc[a-zA-Z]*[ \t]*maprocedure[^a-zA-Z0-9]" *
|
- -i pour une recherche insensible à la casse
- -l pour ne sortir que les noms des fichiers contenant la chaîne (car ce nom sera utilisé ensuite)
- [ \t]* pour qu'on puisse détecter de n espaces ou tabulations entre "create" et "proc" et entre "proc" et "maprocedure"
- [a-zA-Z]* pour qu'on puisse détecter "proc" et "procedure" (comme c'est un mot réservé, je considère que n'importe quelle chaîne de caractères collée à "proc" sera forcément "edure"
- [^a-zA-Z0-9] pour exclure les procédures ayant le même radical (ne pas confondre maprocedure et maproceduredetest)
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.