Extraction de chaine avec SED ou autre
Résolu
alx
-
alx13 Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
alx13 Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je pensais arriver à solutionner mon problème avec la commande sed, mais je n'y arrive pas :(
j'ai un fichier composé d'une seule ligne,quand la sortie est mal formaté suite a un timeout du sqlplus notamment
voici son contenu :
opc_gts.sh[25]: ============================================================================^JXXATC_OPCGTS.MAIN >>> ACTIVATION DE LA PROCEDURE D'INTERFACE <<<<<<<<^JXXATC_OPCGTS.MAIN >>> ^I 29 10 2008 00:22.06^JXXATC_TOOLS /^Iappel_submit :^J--------------------d^©but--------------------------^JXXATC_TOOLS /^Iappel_submit : Activ^©e pour^I : J12_1^JXXATC_TOOLS /^Iappel_submit : Code utilisateur : XXXXXXXXX N^ð 2020^JXXATC_TOOLS /^Iappel_submit : Code responsabilit^© : XX XXXXXXXXXXXXXX^JN^ð 1001729^JXXATC_TOOLS /^Iappel_submit : Code application : XXXXXXXXXxXX N^ð^J20005^JXXATC_TOOLS /^Irecherche_parametres_defaut^J.................d^©but...........................^JXXATC_TOOLS /^Irecherche_parametres_defaut : Recherche pour^I :^J$SRS$.XXGL^JXXATD_TOOLS /^Irecherche_parametres_defaut : indice 1^I Valeur : >>1<<^JXXATC_TOOLS /^Irecherche_parametres_defaut : indice 2^I Valeur : >>2<<^JXXATC_TOOLS /^Irecherche_parametres_defaut : indice 3^I Valeur : >>N<<^JXXATC_TOOLS /^Irecherche_parametres_defaut : indice 4^I Valeur : >>0<<^JXXATC_TOOLS /^Irecherche_parametres_defaut^J.................fin.............................^JXXATC_TOOLS /^Iappel_submit : Nombre de param^¨tres >>4<<^JXXATC_TOOLS /^Iappel_submit : Requ^ªte soumise Num^©ro >>799878<<^JXXATC_TOOLS /^Iappel_submit : Traitement^I >>XXGL_PCK_INT940_ASSU<<^JXXATC_TOOLS /^Iappel_submit : Application^I >>XXGL<<^JXXATC_TOOLS /^Iappel_submit : D^©tection traitement >>NORMAL<< Phase^J>>PENDING<<^JXXATC_TOOLS /^Iappel_submit : D^©tection traitement >> ******^IERREUR TIME OUT^J******^JXXATC_TOOLS /^Iappel_submit : sortie de proc^©dure avec code 8^JXXATC_TOOLS /^Iappel_submit :^J----------------------------fin----------------------^JXXATC_OPCGTS.MAIN >>> FIN DE PROCEDURE D'INTERFACE^I <<<<<<<<^JXXATC_OPCGTS.MAIN >>> ^I 29 10 2008 01:22.09^J==========================================FIN===============================^Jopcgts=8: 0403-057 Syntax error
ok je sais c'est moche ;)
bon ce que je n'arrive pas a faire c'est juste d'extraire opcgts=8 de ma ligne.
tout le reste je m'en fiche en faite.
évidement quand le fichier est correctement formater, c'est simple puisque ma chaîne se retrouve seule en dernier ligne
donc avec un
grep -e "opcgts=" ${FichierTrace} | sed 's/opcgts=/ /' | read poubelle OpcGtsID
ça marche bien
voilou si quelqu'un a une idée ou une solution :p
je suis preneur.
Merci
Je pensais arriver à solutionner mon problème avec la commande sed, mais je n'y arrive pas :(
j'ai un fichier composé d'une seule ligne,quand la sortie est mal formaté suite a un timeout du sqlplus notamment
voici son contenu :
opc_gts.sh[25]: ============================================================================^JXXATC_OPCGTS.MAIN >>> ACTIVATION DE LA PROCEDURE D'INTERFACE <<<<<<<<^JXXATC_OPCGTS.MAIN >>> ^I 29 10 2008 00:22.06^JXXATC_TOOLS /^Iappel_submit :^J--------------------d^©but--------------------------^JXXATC_TOOLS /^Iappel_submit : Activ^©e pour^I : J12_1^JXXATC_TOOLS /^Iappel_submit : Code utilisateur : XXXXXXXXX N^ð 2020^JXXATC_TOOLS /^Iappel_submit : Code responsabilit^© : XX XXXXXXXXXXXXXX^JN^ð 1001729^JXXATC_TOOLS /^Iappel_submit : Code application : XXXXXXXXXxXX N^ð^J20005^JXXATC_TOOLS /^Irecherche_parametres_defaut^J.................d^©but...........................^JXXATC_TOOLS /^Irecherche_parametres_defaut : Recherche pour^I :^J$SRS$.XXGL^JXXATD_TOOLS /^Irecherche_parametres_defaut : indice 1^I Valeur : >>1<<^JXXATC_TOOLS /^Irecherche_parametres_defaut : indice 2^I Valeur : >>2<<^JXXATC_TOOLS /^Irecherche_parametres_defaut : indice 3^I Valeur : >>N<<^JXXATC_TOOLS /^Irecherche_parametres_defaut : indice 4^I Valeur : >>0<<^JXXATC_TOOLS /^Irecherche_parametres_defaut^J.................fin.............................^JXXATC_TOOLS /^Iappel_submit : Nombre de param^¨tres >>4<<^JXXATC_TOOLS /^Iappel_submit : Requ^ªte soumise Num^©ro >>799878<<^JXXATC_TOOLS /^Iappel_submit : Traitement^I >>XXGL_PCK_INT940_ASSU<<^JXXATC_TOOLS /^Iappel_submit : Application^I >>XXGL<<^JXXATC_TOOLS /^Iappel_submit : D^©tection traitement >>NORMAL<< Phase^J>>PENDING<<^JXXATC_TOOLS /^Iappel_submit : D^©tection traitement >> ******^IERREUR TIME OUT^J******^JXXATC_TOOLS /^Iappel_submit : sortie de proc^©dure avec code 8^JXXATC_TOOLS /^Iappel_submit :^J----------------------------fin----------------------^JXXATC_OPCGTS.MAIN >>> FIN DE PROCEDURE D'INTERFACE^I <<<<<<<<^JXXATC_OPCGTS.MAIN >>> ^I 29 10 2008 01:22.09^J==========================================FIN===============================^Jopcgts=8: 0403-057 Syntax error
ok je sais c'est moche ;)
bon ce que je n'arrive pas a faire c'est juste d'extraire opcgts=8 de ma ligne.
tout le reste je m'en fiche en faite.
évidement quand le fichier est correctement formater, c'est simple puisque ma chaîne se retrouve seule en dernier ligne
donc avec un
grep -e "opcgts=" ${FichierTrace} | sed 's/opcgts=/ /' | read poubelle OpcGtsID
ça marche bien
voilou si quelqu'un a une idée ou une solution :p
je suis preneur.
Merci
A voir également:
- Sed extraire chaine entre deux motifs
- Extraire une video youtube - Guide
- Extraire le son d'une vidéo - Guide
- Nombre de jours entre deux dates excel - Guide
- Chaine tnt gratuite sur mobile - Guide
- Deux ecran pc - Guide
8 réponses
Salut,
Je ne comprends pas ton problème !?
Un simple :
Je ne comprends pas ton problème !?
Un simple :
sed 's/opcgts=/ /' ${FichierTrace}ne suffit pas ?
FIN===============================^Jopcgts=8: 0403-057 Syntax error
ben non ça ne suffit pas, comment tu fais pour extraire que le 8, sans tout le reste???,
sed 's/opcgts=/ /' ${FichierTrace} va me mettre un jolie espace a la place de ma chaîne, c'est tout :(
ben non ça ne suffit pas, comment tu fais pour extraire que le 8, sans tout le reste???,
sed 's/opcgts=/ /' ${FichierTrace} va me mettre un jolie espace a la place de ma chaîne, c'est tout :(
Ben explique alors ce que tu veux vraiment : avant => après !!!
Parce que si je m'en tiens à tes explications et ta syntaxe qui marche :
grep -e "opcgts=" ${FichierTrace} | sed 's/opcgts=/ /' | read poubelle OpcGtsID
grep -e "opcgts=" ${FichierTrace} ça affiche bien que ta ligne ?
| sed 's/opcgts=/ /' substitue "opcgts=" par un espace ?
read poubelle OpcGtsID récupère 2 variables ?
Donc que sont sensées contenir ces 2 variables ???
Parce que si je m'en tiens à tes explications et ta syntaxe qui marche :
grep -e "opcgts=" ${FichierTrace} | sed 's/opcgts=/ /' | read poubelle OpcGtsID
grep -e "opcgts=" ${FichierTrace} ça affiche bien que ta ligne ?
| sed 's/opcgts=/ /' substitue "opcgts=" par un espace ?
read poubelle OpcGtsID récupère 2 variables ?
Donc que sont sensées contenir ces 2 variables ???
oui ça affiche bien ma ligne, mais je n'ai qu'une ligne dans ce fichier quand il est mal formaté
avec des ^J, des ^I, et des espaces un peu partout..... :/
donc le grep me renvois toute la ligne (et encore j'ai de la chance dans mon cas je suis a - de 2048 caractère, après grep ne sait pas lire les lignes plus longues :/)
mon problème c'est juste quand le fichier est mal formaté, quand c'est sur plusieurs ligne, je sais faire :p
enfin, j'espère que cette fois ci, j'ai ete un peu plus clair :/
en tout cas merci pour ton aide jipicy
avec des ^J, des ^I, et des espaces un peu partout..... :/
donc le grep me renvois toute la ligne (et encore j'ai de la chance dans mon cas je suis a - de 2048 caractère, après grep ne sait pas lire les lignes plus longues :/)
mon problème c'est juste quand le fichier est mal formaté, quand c'est sur plusieurs ligne, je sais faire :p
enfin, j'espère que cette fois ci, j'ai ete un peu plus clair :/
en tout cas merci pour ton aide jipicy
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
trop facile jipicy!!
ça serait abusé d'avoir une explication détaillé? :p
sed
-n --> pour n'afficher que le résultat en somme
's --> substitution
.*opcgts= -->du premier caractère jusqu'a la chaine?
\(.\).*/ -->?
\1 --> renvoyer 1 seul caractère ?
/p' --> le faire 1 seul fois?
en tout cas merci :)
ça serait abusé d'avoir une explication détaillé? :p
sed
-n --> pour n'afficher que le résultat en somme
's --> substitution
.*opcgts= -->du premier caractère jusqu'a la chaine?
\(.\).*/ -->?
\1 --> renvoyer 1 seul caractère ?
/p' --> le faire 1 seul fois?
en tout cas merci :)
sed
-n --> pour n'afficher que le résultat surdemande conjointement avec l'option "p"
's --> substitution
.*opcgts= -->du premier caractère jusqu'a la chaine?
\(.\).--> sous-chaine de caractères mise en correspondance pour la référence arrière (ici un seul caractère symbolisé par le point)
.* -> le reste de la ligne
\1 --> référence arrière à afficher (ici la 1ère et unique=
/p' --> affichage demandé
Voir dans la FAQ: Les sous-expressions et références arrières
-n --> pour n'afficher que le résultat surdemande conjointement avec l'option "p"
's --> substitution
.*opcgts= -->du premier caractère jusqu'a la chaine?
\(.\).--> sous-chaine de caractères mise en correspondance pour la référence arrière (ici un seul caractère symbolisé par le point)
.* -> le reste de la ligne
\1 --> référence arrière à afficher (ici la 1ère et unique=
/p' --> affichage demandé
Voir dans la FAQ: Les sous-expressions et références arrières