Extraction de chaine avec SED ou autre

Résolu/Fermé
alx - 12 nov. 2008 à 11:22
alx13 Messages postés 9 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 13 novembre 2008 - 13 nov. 2008 à 15:01
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
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 nov. 2008 à 19:20
Salut,

Je ne comprends pas ton problème !?

Un simple :
sed 's/opcgts=/ /' ${FichierTrace} 
ne suffit pas ?
0
alx13 Messages postés 9 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 13 novembre 2008
13 nov. 2008 à 09:30
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 :(
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 nov. 2008 à 10:16
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 ???
0
alx13 Messages postés 9 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 13 novembre 2008
13 nov. 2008 à 10:28
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 nov. 2008 à 10:31
Plus clair ? Non ;-((

Tu veux quoi en sortie exactement ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alx13 Messages postés 9 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 13 novembre 2008
13 nov. 2008 à 10:43
le 8 de cette ligne "FIN===============================^Jopcgts=8: 0403-057 Syntax error "

:)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 nov. 2008 à 12:50
sed -n 's/.*opcgts=\(.\).*/\1/p' fich
:-))
0
alx13 Messages postés 9 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 13 novembre 2008
13 nov. 2008 à 13:35
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 :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
13 nov. 2008 à 14:12
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
0
alx13 Messages postés 9 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 13 novembre 2008
13 nov. 2008 à 15:01
donc ça sers à ça une référence arrière aaaaahhhhhh

bon merci, je vais relire ça dessuite
0