IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Extraire du texte


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Par défaut Extraire du texte
    Bonjour j'ai un texte de cette forme :

    La Jambe de Frida ik987 Inspirée par l'artiste-peintre Mexicaine Frida Kahlo, La Jambe de Frida voit le jour en
    2007. Cependant, ce sera à la fin de l'année 2009 que le groupe goûtera au plaisir de la scène, et
    notamment sur celle du Jardin de Verre en janvier 2010. Cette date marquera un point de lancement
    majeur dans l'histoire du groupe.
    Loudblast fr543
    Perfecto bn889
    Toxic Waste bb654 C'est confirmé !!! Les TOXIC entre en studio fin février 2012 pour enregistrer 3 nouveaux
    titres. Ils finiront sur un Maxi 45T vinyl avec le groupe de Punk-Rock LE REPARATEUR !
    Bull Terrier re453
    R Stoner az332
    Et en faite je voudrais capturer le texte qu'il y a après un code de la forme : ik987
    et qui ce termine par un "." ou "!" ou encore "?"

    J'ai essayé sans réussir pour l'instant j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -A$nbLignesAAfficher ik987 text.txt| sed 1s/'^.*\(\([a-z]\{2\}\)\([0-9]\)\{3\}\)'//
    Merci pour votre aide.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Il y a des retours à la ligne intempestifs dans ton texte, c'est normal ou pas ?

    Si j'ai bien saisi ta demande, dans ton exemple il faudrait retourner :
    ik987 Inspirée par l'artiste-peintre Mexicaine Frida Kahlo, La Jambe de Frida voit le jour en
    2007
    exact ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Par défaut
    Non en fait je fait un grep sur le fichier d'une expression reguliere, par exemple (ik987):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -A$nbLignesAAfficher ik987 text.txt
    je voudrai avoir le paragraphe sur l'artiste qui correspond a ce code (en l’occurrence: La Jambe de Frida) :

    Ce qui doit me donner :

    Inspirée par l'artiste-peintre Mexicaine Frida Kahlo, La Jambe de Frida voit le jour en
    2007. Cependant, ce sera à la fin de l'année 2009 que le groupe goûtera au plaisir de la scène, et
    notamment sur celle du Jardin de Verre en janvier 2010. Cette date marquera un point de lancement
    majeur dans l'histoire du groupe.
    Autre exemple, un grep avec "bb654" doit retourner :

    C'est confirmé !!! Les TOXIC entre en studio fin février 2012 pour enregistrer 3 nouveaux
    titres. Ils finiront sur un Maxi 45T vinyl avec le groupe de Punk-Rock LE REPARATEUR !
    Voila merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai pensé à ça qui marche avec ton exemple mais j'ai du mal à cerner si cela correspond vraiment à ce que tu veux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep ik987 text.txt | sed "s/.*ik987 \(.*\)[\?\.\!].*/\1/"
    Chaque paragraphe est-il toujours sur une seule ligne?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Par défaut
    non justement il se peut qu'il soit sur une ligne ou 3 ou 5 etc....
    et il peuvent se terminer par un "." ou "!" ou encore "?"

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par Labyad Voir le message
    Bonjour j'ai un texte de cette forme :



    Et en faite je voudrais capturer le texte qu'il y a après un code de la forme : ik987
    et qui ce termine par un "." ou "!" ou encore "?"

    J'ai essayé sans réussir pour l'instant j'ai ceci:



    merci pour votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed '/ik987/,/[\.\?\!]/ !d; s/\([\.\?\!]\).*/\1/' t                  
    La Jambe de Frida ik987 Inspirée par l'artiste-peintre Mexicaine Frida Kahlo, La Jambe de Frida voit le jour en
    2007?
    $

    en fait c'est le /truc/,/machin/ qui selectionne le paragraphe à traiter, et ensuite suffit de substituer ce qui suit la ponctuation par rien pour éliminer les débuts ou fin de lignes d'autres phrases qui pourraient s'y trouver...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $ vi t
    La Jambe de Frida ik987 Inspirée par l'artiste-peintre Mexicaine 
    Frida Kahlo, La Jambe de Frida voit le jour en
    2007? Cependant, ce sera à la fin de l'année 2009 que le groupe goûtera au plaisir de la scène, et
    notamment sur celle du Jardin de Verre en janvier 2010. Cette 
    date marquera un point de lancement
    majeur dans l'histoire du groupe.
    Loudblast fr543
    Perfecto bn889
    Toxic Waste bb654 C'est confirmé !!! Les TOXIC entre en studio fin février 2012 pour enregistrer 3 nouveaux
    titres. Ils finiront sur un Maxi 45T vinyl avec le groupe de Punk-Rock LE REPARATEUR !
    Bull Terrier re453
    R Stoner az332 
     
    $ sed '/ik987/,/[\.\?\!]/ !d; s/\([\.\?\!]\).*/\1/' t  
    La Jambe de Frida ik987 Inspirée par l'artiste-peintre Mexicaine 
    Frida Kahlo, La Jambe de Frida voit le jour en
    2007?
    $
    j'oubliais de tester avec des retours à la lignes en milieu de phrase mais c'est ok aussi

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Labyad Voir le message
    non justement il se peut qu'il soit sur une ligne ou 3 ou 5 etc....
    et il peuvent se terminer par un "." ou "!" ou encore "?"
    Un petit cours sur le sed:
    [\?\.\!] = 1 caractère qui correspond soit à "." , "!" ou "?". Le "\" est la pour désactiver leur fonction de base
    \(.*\) = .* est une chaine de caractère quelconque la plus longue possible. les slash et parenthèse sont la pour stocker le résultat dans \1 (tu peux en mettre d'autres après elle seront stocker dans \2 etc ...) qu'on pourra utiliser dans la partie remplacement de sed.

    Comme sed est gourmand, le 1er ".*" contiendra des "." , "!" et "?" tant qu'il en reste un plus loin.

    Tu utilisais un grep donc j'avais supposé que ce n'était que sur une ligne. C'est que le grep retourne en fait
    Le sed est dur à utiliser s'il y a plusieurs lignes à prendre en compte.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    En partant de ton texte de départ et en modifiant quelque peu la syntaxe de frp31 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed '/ik987/,/[.?!]$/!d;s/.*ik987 //' plop 
    Inspirée par l'artiste-peintre Mexicaine Frida Kahlo, La Jambe de Frida voit le jour en
    2007. Cependant, ce sera à la fin de l'année 2009 que le groupe goûtera au plaisir de la scène, et
    notamment sur celle du Jardin de Verre en janvier 2010. Cette date marquera un point de lancement
    majeur dans l'histoire du groupe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed '/bb654/,/[.?!]$/!d;s/.*bb654 //' plop 
    C'est confirmé !!! Les TOXIC entre en studio fin février 2012 pour enregistrer 3 nouveaux
    titres. Ils finiront sur un Maxi 45T vinyl avec le groupe de Punk-Rock LE REPARATEUR !

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Par défaut
    Merci a tous.

    zipe31 j'ai essayé ton code sur la console et il marche bien mais le souci c'est que je doit l'utiliser dans un script shell en csh mais lors de l'execution du script j'ai un message d'erreur qui est le suivant :
    ]: Event not found.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par Labyad Voir le message
    Merci a tous.

    zipe31 j'ai essayé ton code sur la console et il marche bien mais le souci c'est que je doit l'utiliser dans un script shell en csh mais lors de l'execution du script j'ai un message d'erreur qui est le suivant :
    Parce qu'il faut protéger les caractères spéciaux et notamment le "!" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/bb654/,/[\.\?\!]$/\!d;s/.*bb654 //'

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Parce qu'il faut protéger les caractères spéciaux et notamment le "!" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/bb654/,/[\.\?\!]$/\!d;s/.*bb654 //'
    J'ai toujours le même message d'erreur dans le shell script :

    ]: Event not found.

    Voici la partie concernée de mon shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #! /bin/csh
     
    # nombre de lignes contenues dans le fichier 
    set nbLignes = `wc -l $1| cut -d" " -f1`
    echo `grep -A$nbLignes $chaine $1| sed '/bb654/,/[\.\?\!]$/\!d;s/.*bb654 //'`
    PS: je tape la commande : ./get text.txt

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Il y a longtemps que je n'ai plus fait de csh, mais pourquoi utilises-tu echo + backquote?

    Ne peux-tu faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #! /bin/csh
     
    # nombre de lignes contenues dans le fichier
    set nbLignes = `wc -l $1| cut -d" " -f1`
    grep -A$nbLignes $chaine $1| sed '/bb654/,/[\.\?\!]$/\!d;s/.*bb654 //'
    Et à quoi sert la variable indéfinie 'chaine' ?

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Par défaut
    j'utilise echo + backquotes pour renvoyer le résultat sur la sortie standard, la variable chaîne permet de récupérer les lignes qui contiennent la zone de texte qui m'intéresse.

  14. #14
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonsoir.

    la variable chaîne permet de récupérer les lignes qui contiennent la zone de texte qui m'intéresse.
    Oui sauf que :
    1 - ta variable chaîne n'est jamais settée avec une valeur donc ne risque pas de fonctionner ;
    2 - le grep "sur la zone de texte qui t'interesse" ne sert visiblement à rien étant donné que le sed qui t'as été fournie n'opère que sur le motif "bb654" que tu pourrait remplacer par une variable ou un argument...

    Testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [idriss@hp-dv6:~]$ cat toto.txt 
    La Jambe de Frida ik987 Inspirée par l'artiste-peintre Mexicaine Frida Kahlo, La Jambe de Frida voit le jour en
    2007. Cependant, ce sera à la fin de l'année 2009 que le groupe goûtera au plaisir de la scène, et
    notamment sur celle du Jardin de Verre en janvier 2010. Cette date marquera un point de lancement
    majeur dans l'histoire du groupe.
    Loudblast fr543
    Perfecto bn889
    Toxic Waste bb654 C'est confirmé !!! Les TOXIC entre en studio fin février 2012 pour enregistrer 3 nouveaux
    titres. Ils finiront sur un Maxi 45T vinyl avec le groupe de Punk-Rock LE REPARATEUR !
    Bull Terrier re453
    R Stoner az332 
    [idriss@hp-dv6:~]$ cat test.csh 
    #!/bin/csh
     
    sed '/'$2'/,/[\.\?\!]$/\!d;s/.*bb654 //' $1
    [neumann@hp-dv6:~]$ ./test.csh toto.txt bb654
    C'est confirmé !!! Les TOXIC entre en studio fin février 2012 pour enregistrer 3 nouveaux
    titres. Ils finiront sur un Maxi 45T vinyl avec le groupe de Punk-Rock LE REPARATEUR !
    [idriss@hp-dv6:~]$
    N'est-ce pas le comportement que tu recherche ? Le grep serait donc bien inutile dans ce cas

    echo + backquotes pour renvoyer le résultat sur la sortie standard
    Inutile comme tu peux le constater avec mon exemple... tu crois qu'elles vont où les sorties de tes commandes par défaut ?

    Cordialement,
    Idriss

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Bonsoir.

    Oui sauf que :
    1 - ta variable chaîne n'est jamais settée avec une valeur donc ne risque pas de fonctionner ;
    Complètement d'accord (avec tout le reste aussi, évidemment)! sauf...

    Testé :
    avec un test minimal, peut-être?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat test.csh 
    #!/bin/csh
    sed '/'$2'/,/[\.\?\!]$/\!d;s/.*bb654 //' $1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat test.csh 
    #!/bin/csh
    sed '/'$2'/,/[\.\?\!]$/\!d;s/.*'$2' //' $1

  16. #16
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Oui une coquille

    Bien vu

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Par défaut
    C'est bon mon problème est résolu, merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] Extraire le texte d'un fichier PDF
    Par brune38 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 13/10/2009, 10h26
  2. Réponses: 3
    Dernier message: 21/05/2008, 18h24
  3. [COM] Extraire le texte d'un fichier "word" (.doc) avec
    Par ptikiwi dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/06/2006, 17h06
  4. EXTRAIRE DU TEXTE
    Par chekibperl dans le forum Langage
    Réponses: 5
    Dernier message: 21/10/2005, 18h23
  5. Extraire du texte et réafficher la suite
    Par freud dans le forum ASP
    Réponses: 4
    Dernier message: 20/06/2005, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo