Extraction de chaine avec SED ou autre

[Résolu/Fermé]
Signaler
-
Messages postés
9
Date d'inscription
mercredi 12 novembre 2008
Statut
Membre
Dernière intervention
13 novembre 2008
-
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

8 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Salut,

Je ne comprends pas ton problème !?

Un simple :
sed 's/opcgts=/ /' ${FichierTrace} 
ne suffit pas ?
Messages postés
9
Date d'inscription
mercredi 12 novembre 2008
Statut
Membre
Dernière intervention
13 novembre 2008

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 :(
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
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 ???
Messages postés
9
Date d'inscription
mercredi 12 novembre 2008
Statut
Membre
Dernière intervention
13 novembre 2008

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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Plus clair ? Non ;-((

Tu veux quoi en sortie exactement ???
Messages postés
9
Date d'inscription
mercredi 12 novembre 2008
Statut
Membre
Dernière intervention
13 novembre 2008

le 8 de cette ligne "FIN===============================^Jopcgts=8: 0403-057 Syntax error "

:)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
sed -n 's/.*opcgts=\(.\).*/\1/p' fich
:-))
Messages postés
9
Date d'inscription
mercredi 12 novembre 2008
Statut
Membre
Dernière intervention
13 novembre 2008

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 :)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
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
Messages postés
9
Date d'inscription
mercredi 12 novembre 2008
Statut
Membre
Dernière intervention
13 novembre 2008

donc ça sers à ça une référence arrière aaaaahhhhhh

bon merci, je vais relire ça dessuite