Extraction de chaine avec SED ou autre

Résolu
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
Configuration: Windows XP
Firefox 3.0.3

8 réponses

  1. Modérateur
    Salut,

    Je ne comprends pas ton problème !?

    Un simple :
    sed 's/opcgts=/ /' ${FichierTrace} 
    ne suffit pas ?
    0
    1. 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
      1. Modérateur
        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
        1. 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
          1. Modérateur
            Plus clair ? Non ;-((

            Tu veux quoi en sortie exactement ???
            0
        2. le 8 de cette ligne "FIN===============================^Jopcgts=8: 0403-057 Syntax error "

          :)
          0
          1. Modérateur
            sed -n 's/.*opcgts=\(.\).*/\1/p' fich
            :-))
            0
            1. 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
              1. Modérateur
                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
            2. donc ça sers à ça une référence arrière aaaaahhhhhh

              bon merci, je vais relire ça dessuite
              0