Forum Programmation.shell GREP : Comment obtenir l'ensemble des lignes contenant "toto"

Posté par  .
Étiquettes : aucune
0
19
juil.
2005
Bonjour,


Pour mon projet, je dois recupéper tous les fichiers qui contiennent la chaine de caractère FLUX;

J'y arrive très bien par le biais de la commande :

$find . -name "*.xml" | xargs grep -n "FLUX"

"FLUX" se trouve toujours dans une balise xml [requete name=xml]
(je mets des crochets a la place des chevrons xml sinon ca ne passe pas l'édition)dans mes fichiers xml je voudrais recupérer tout le contenu de la balise.


Je voudrais précisement récuperer toute le contenu de la balise "requete " qui contient FLUX, et qui est sur plusieur ligne ex :


bla bla
....
[requete name=xml]
SELECT REF_C as IND_PUB
FROM REF, FLUX
WHERE FLU_T_IND_PUB_FKR=REF_ID
AND FLU_T_ID=10
[/requete]
....
bla bla



Est ce qu'il est possible de récupérer le contenu de la balise [requete name=xml] qui est sur plusieurs lignes dans le fichier ?
Si oui, comment ?

Merci de m'avoir lu et pour votre aide.
  • # AWK

    Posté par  . Évalué à 3.

    je ne pense pas que ça soit possible avec Grep (sauf si le nb de ligne des requêtes est toujours identique), sinon quelque chose de ce genre :
    #fichier xml.awk
    {
    if (/[requete name=xml]/) {
    	while (1) {
    		print $0
    		if (/[\/requete]/) {break}
    		getline
    	}
    }
    et ceci devrait faire l'affaire awk -f xml.awk *.xml
    • [^] # Re: AWK

      Posté par  . Évalué à 1.

      Merci, je vais essayer ta solution dès demain et tenir au courant en postant sur ce thread.
      Sinon quelqu'un connait-il de bon tuto sed/awk je sais que google est mon ami, mais je préfère les conseils d'un homme à celui d'un robot ;)
      • [^] # Re: AWK

        Posté par  . Évalué à 6.

        je sais que google est mon ami, mais je préfère les conseils d'un homme à celui d'un robot ;)

        Le conseil d'un homme : va demander au robot :-]
    • [^] # Re: AWK

      Posté par  . Évalué à 1.

      j'ai essayé ton script awk, il est nickel et marche super bien, encore merci.
      Il ne manquait qu'une accolade fermante à la fin du script, bref rien de méchant.

      Puis-je modifier le script pour qu'il me renvoie que les balises [requete name=xml] contenant le mot "FLUX" ?
      • [^] # Re: AWK

        Posté par  . Évalué à 2.

        Effectivement je n'avais pas parfaitement répondu à ta question :
        #fichier xml.awk
        {
        if (/[requete name=xml]/) {
        	req = "" 
        	while (1) {
        		req = req $0 "\n"
        		if (/[\/requete]/) {break}
        		getline
        	}
        	if (req ~ /FLUX/) {print req}
        }
        }
        • [^] # Re: AWK

          Posté par  . Évalué à 1.

          Wahou !!! Merci !!! T'es un chef.

          Pour moi qui ne connait rien en awk, peux tu me décries stp ce que fait chaque ligne.


          01 #fichier xml.awk
          02 {
          03 if (/[requete name=xml]/) {
          04 req = ""
          05 while (1) {
          06 req = req $0 "\n"
          07 if (/[\/requete]/) {break}
          08 getline
          09 }
          10 if (req ~ /FLUX/) {print req}
          11 }
          12 }


          - le 1er if : trouve la balise [requete name=xml];
          - tu initialises "req" à chaîne vide;
          - une boucle "tant que" interrompue lorsque la balise fermante [requete] est trouvée
          - je sais pas ce que fait :
          o le "if" de la ligne 07
          o pr le getline l8
          o le "if" l10

          un petit éclaircissement ?
          • [^] # Re: AWK

            Posté par  . Évalué à 2.

            7. arrête la boucle si il rencontre la balise fermant [/requete].
            8. lis la ligne suivante
            10. affiche le contenu de req si req contient le mot "FLUX"


            Le plus dur avec un langage de programmation que tu connais pas, c'est d'apprendre sa syntaxe, pas de comprendre ce qu'un bout de code fait :(
            (exception faite du malbolge, whitespace, brainfuck, et autres bizarreries du genre)
  • # sed

    Posté par  . Évalué à 2.

    pffff j'ai mis le temps, mais j'ai retrouvé : http://linuxfr.org/forums/26/5986.html(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.