Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : Extraire une sous chaîne de plusieurs lignes
Posté par Hardy Damien (page perso, ) le 03 mars 2005Donc j'ai fait un
strings src.pbl > test.txtmais ça me retourne 9000 lignes de texte ... et parmi elle des requêtes SQL.
Donc je souhaite filtrer tout ce texte pour ne récupérer que les sous chaînes comprises entre "SELECT" et "USING TRLOCALE;" mais qui sont sur plusieurs lignes et c'est là que j'ai un soucis :/ je n'arrive pas à récupérer un pattern qui correspond à plusieurs lignes ... (sed ou grep)
Dam
ex de requete :
SELECT SUM("INSEE"."Q_MEN2_INSEE"), SUM("INSEE"."M_POP2_INSEE")
INTO :LNBMENAGESINSEE, :LPOPULATIONINSEE
FROM "INSEE", "ZON_INSEE", "ZONE"
WHERE ( "INSEE"."C_COMM_INS" = "ZON_INSEE"."C_COMM_INS" ) AND
( "ZON_INSEE"."C_ZONE" = "ZONE"."C_ZONE" ) AND
( "ZON_INSEE"."C_VER" = "ZONE"."C_VER" ) AND
( ( "ZONE"."C_VER" = :LCODEVERSION ) AND
( "ZONE"."C_ZONE" = :STRZONE ) )
USING TRLOCALE;
> Lire le message (7 commentaires, moyenne: 2,4).
Comme ca ca devrait marcher
grep -e [SELECT][[:alnum:]][TRLOCALE] nomdufichierouonfouille
-
[^]Re: Comme ca ca devrait marcher
Posté par Calim' Héros (Jabber id, page perso, ) le 03/03/2005 à 13:30. (lien). Évalué à 3.On me dit que comme ca c'est plus court :
grep -e [SELECT].*[TRLOCALE] nomdufichierouonfouille-
[^]Re: Comme ca ca devrait marcher
Posté par Hardy Damien (page perso, ) le 03/03/2005 à 14:00. (lien). Évalué à 3.nope ca n'a pas l'air d'etre ca :/ il me sort des un tas de chose qui n'on pas grand chose a voir (les requetes sont dedans aussi ... mais par exemple voici le tail du resultat :
"DEPT_DOSS"."C_VER" =0 ) AND ( "DEPT_DOSS"."C_DEPT" =0 )
BLICtransaction.RDRD
SELECT "DEPT_DOSS"."M_SURF_DOSS" , "DEPT_DOSS"."M_CA_DOSS" , "VERSION"."M_SURDAT*
F_VER" , "VERSION"."M_CA_VER" , "VERSION"."M_PAN_VER" , "DEPT_DOSS"."M_PART_DEPT" FROM "DEPT_DOSS" , "VERSION" WHERE ( "DEPT_DOSS"."C_VER" ="VERSION".
"C_VER" ) and ( ( "DEPT_DOSS"."C_VER" =0 ) AND ( "DEPT_DOSS"."C_DEPT" =0 ) )
BLLCtransaction.RLRDRLRDRDRD
SELECT "REND_ENS"."M_SURFMOY_REND" , "REND_ENS"."M_CA_DEPT" , "REND_ENSDAT*
"."M_REND_REND" FROM "REND_ENS" , "TR_SURF" WHERE ( "REND_ENS"."C_TR_SURF" ="TR_SURF"."C_TR_SURF" ) and ( ( "REND_ENS"."C_ENS" =' ' ) AND ( "REND_ENS"
."N_PER" =' ' ) AND ( "REND_ENS"."C_DEPT" =0 ) AND ( "TR_SURF"."M_DEB_SURF" <= 0 ) AND ( "TR_SURF"."M_FIN_SURF" >= 0 ) )
BSSLLCtransaction.RLRDRD
SELECT "CONC"."C_CONC" FROM "CONC" WHERE "CONC"."C_CONC" =' ' AND "CONC"."C_VER"DAT*
BSLCtransaction.
Dam
-
Hum...
Et en oubliant le strings ?
Genre :
grep -z -U "SELECT.*;" src.pbl
Le -z c'est pour dire que les chaînes de caractères finissent par \0, et non par CRLR, et -U pour dire que c'est un fichier binaire.
Pas testé, car je n'ai pas de fichiers de ce type, mais bon.
Si ça marche, ça ne devrait sortir que les chaînes de caractères ressemblant à SELECT.*;
A tester, donc, et désolé si c'est pas la solution.
All articles which are excluded shall be deemed included
Tous les articles exclus sont considérés inclus
--Brian de Palma in Phantom of the Paradize
-
[^]Re: Hum...
Posté par Hardy Damien (page perso, ) le 03/03/2005 à 15:19. (lien). Évalué à 2.Pas mal, ca fait un peu de bruit autour mais on se rapproche du l'idéal
grep -z -a -U "SELECT .*;" src.pbl | sed "/^$/d"
Dam
ex fin du resultat obtenu :
DAT* ö☺
Boolean bRetour
Pointer ptPointerCourant
Long lIndex
String strTypeZone
//**********************
//* CORPS DE LA FONCTION
//--- Met en place le sablier
ptPointerCourant = SetPointer(HourGlass!)
//--- Déclare un curseur
DECLARE Cur_Zone CURSOR FOR
SELECT DISTINCT "ZONE"."C_ZONE",
"ZONE"."T_ZONE"
FROM "ZONE"
WHERE "ZONE"."C_VER" = :lCODEVERSION
ORDER BY "ZONE"."T_ZONE" ASC,
"ZONE"."C_ZONE" ASC
USING TRLOCALE;
//--- Ouvre le curseur
OPEDAT*
Sed le fait !
strings src.pbl | sed -n -e '/\<SELECT\>/,/\<USING *TRLOCALE/p'
Pas de signature
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.