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 :

Filtrer une sortie de script avec GREP ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut Filtrer une sortie de script avec GREP ?
    Bonjour a tous,
    je sollicite votre aide conçernant le probleme suivant :

    j'ai un scripte qui, lorsque je l'execute me 'pollue' litteralement ma fenetre de terminal telelment qu'il est 'bavard'.
    nommé : Running.sh
    que je lance classiquement comme ceci : ./Running.sh

    je voudrai pourvoir executer ce scripte mais ne voir apparaitre sur ma fenetre de terminal uniquement certains messages,
    disons ceux qui commenceraient par "##" par exemple
    comme ceci : printf( "##hello world" ); // tout le monde le connait celui la !!!

    celui la en revanche sera perdu, non affiché : printf( "hello world" );

    je me suis tourné vers la commande GREP mais j'ai un soucis de comprehension :

    il est dit que cette commange agit sur un fichier qu'elle va parser et non sur le flus de sortie d'un scripe que l'on veut executer.
    j'ai besoin que GREP execute le fichier et non qu'elle l'ouvre !!

    j'ai essayé 'avant de demander de l'aide' toute sorte de combinaison mais sans succées,
    comme ceci :

    ./Running.sh > grep "^##"

    merci pour le coup de pouce !!, a moins que je me soit completement fourvoyé, peut etre que grep ne peut attraper un flux
    fab

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./Running.sh | grep "^##"
    et si tu veux prendre tous les textes en compte (textes erreurs et textes normaux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./Running.sh  2>&1 | grep "^##"

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par fab_lab Voir le message
    il est dit que cette commange agit sur un fichier qu'elle va parser et non sur le flus de sortie d'un scripe que l'on veut executer.
    dans la doc (man grep) il est dit tout au début que si l'argument [FICHIER] est manquant alors grep ira lire sur l'entrée standard (stdin)

    dès lors le but c'est simplement de connecter la sortie standard (stdout) du script sur l'entrée standard de grep, et c'est précisément à ça que sert le pipe | comme le propose hizoka


  4. #4
    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 fab_lab Voir le message
    il est dit que cette commange agit sur un fichier qu'elle va parser et non sur le flus de sortie d'un scripe que l'on veut executer.
    Le man grep de Debian précise bien:
    grep recherche dans les FICHIERs indiqués les lignes correspondant à un certain MOTIF.
    Par défaut, grep affiche les lignes qui contiennent une correspondance au motif.
    L'entrée standard est lue si FICHIER est omis ou si FICHIER vaut « - ».
    Citation Envoyé par fab_lab Voir le message
    j'ai besoin que GREP execute le fichier et non qu'elle l'ouvre !!
    Ouh là! J'ai l'impression qu'il y a de la confusion dans l'air!

    Il n'est pas question que "grep" exécute un fichier...

    Pour faire simple, lorsque tu exécutes ton script, celui-ci écrit plein de choses sur sa sortie standard (stdin) ou sa sortie d'erreur (stderr), lesquelles sorties sont, par défaut, affichées dans le terminal d'où tu as lancé la commande.
    Et tu voudrais dériver le flux de sortie de ta commande pour que "grep" le filtre. C'est exactement à ça que sert le "|". Il permet d'exécuter simultanément les 2 commandes de part et d'autre du signe et, surtout, de brancher la sortie standard de la 1ère sur l'entrée standard de la 2ème.

    j'ai essayé 'avant de demander de l'aide' toute sorte de combinaison mais sans succées, comme ceci :

    ./Running.sh > grep "^##"
    Il est fort probable que tu aies involontairement créé, dans le répertoire courant, un fichier nommé "grep" et contenant l'intégralité de la sortie de l'exécution de ton script!
    Tu peux le consulter, voire le filtrer avec une commande comme grep "^##" ./grep | less, mais tu peux aussi le supprimer purement et simplement avec rm ./grep.

    merci pour le coup de pouce !!,
    Pour la solution, voir l'excellente proposition de hizoka.

    a moins que je me soit completement fourvoyé, peut etre que grep ne peut attraper un flux
    Si, si! (voir plus haut)

    [EDIT] grillé...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut merci
    merci a tous de m'avoir aidé et surtout expliqué,
    enfin le silence en sortie de fichier, quel bonheur.

    je me suis mis recement a LINUX grace a l'arrivée du raspberry-pi,
    j'y ait vu une opportunité d'apprendre,

    ce que j'ai cherché a faire c'est sur une ligne de commande unique, executer le scripte et faire en sorte d'intercepter
    son flux de sortie pour que GREP 'tamise' un peut tout ça.
    c'est pour cela que j'ai tenté le > mais vous avez vus juste ça ne marche pas
    j'avais pas pensé a l'operateur PIPE, merci du TUYAU .....

    il y a pas mal de bon bouquins en passant,
    j'aime bien ceux de Christophe BLAESS mais beaucoup moins ceux de Pierre Ficheux.

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

Discussions similaires

  1. Lancement d'une partie du script avec un bouton
    Par arnest dans le forum QlikView
    Réponses: 2
    Dernier message: 31/05/2016, 09h36
  2. [Électronique] Filtrer une sortie moyenne fréquence ?
    Par Iradrille dans le forum Embarqué
    Réponses: 30
    Dernier message: 27/02/2016, 10h01
  3. [2.x] Filtrer une ComboBox trop longue avec Symfony
    Par maarek dans le forum Symfony
    Réponses: 5
    Dernier message: 06/02/2012, 22h49
  4. script avec grep
    Par turbo_chess dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/03/2007, 16h31
  5. petit script avec grep
    Par turbo_chess dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 21/03/2007, 15h39

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