Mettre le résultat d'un grep comme argument d'un grep

Résolu
paz59 Messages postés 10 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je pêche sur un grep actuellement

Je veux a la base verifier qu'un pid bien défini est présent ou non

ps -ef | egrep -vw '(ps|egrep)' | egrep PID

Je trouve ce pid dans une log et j'aimerai ne plus avoir a afficher la log pour trouver le pid

Il est possible d’afficher mon pid via ceci

grep pid LOG | grep -o '[[:digit:]]*'

Ce que je voudrai c'est fusionner ces 2 lignes qui fonctionne séparément

ps -ef | egrep -vw '(ps|egrep)' | egrep 3424

&

grep pid LOG | grep -o '[[:digit:]]*'

Un truc du genre :

ps ef | egrep -vw '(ps|egrep)' | egrep 'grep pid /appli01/bakweb/log/cde_int_prel-ext_cre-int_ar_160107_14187.log | grep -o '[[:digit:]]*''

Merci d'avance

4 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour

    Si tu veux injecter le résultat d'une commande shell dans une autre commande shell tu peux :

    1) mémoriser le résultat de la première commande dans une variable intermédiaire. Ce n'est pas une honte, ça permet d'être plus lisible et de ré-éxploiter ce résultat par la suite :p

    PID=$(grep pid LOG | grep -o '[[:digit:]]*')
    ps -ef | egrep -vw '(ps|egrep)' | egrep ${PID}


    2) directement utiliser l'opérateur
    $(...)
    (en bash) (ou
    `...`
    . en shell) pour ne former qu'une commande :

    ps -ef | egrep -vw '(ps|egrep)' | egrep $(grep pid LOG | grep -o '[[:digit:]]*')


    Bonne chance
    1
    1. PAZ59
       
      Super j'essai ça lundi et je vous fait un retour, mais je le sens bien.

      Merci d'avance
      0
    2. paz59 Messages postés 10 Statut Membre
       
      Ca marche capitaine, ça marche
      0
    3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      :-) Parfait, bonne continuation !
      0
  2. UnGars
     
    Salut,

    Peux-tu nous mettre un exemple de ce que renvoient les commandes :
    ps -ef | egrep -vw '(ps|egrep)' | egrep 3424

    grep pid LOG | grep -o '[[:digit:]]*'

    Ainsi qu'un bout de ton fichier de log d'où est extrait le PID.
    0
    1. UnGars
       
      Déjà à la base
      ps -ef | egrep -vw '(ps|egrep)' | egrep 3424
      peut être remplacé par
      ps -ef | egrep '34[2]4'
      (à noter que les crochets peuvent être n'importe où)
      0
      1. paz59 Messages postés 10 Statut Membre > UnGars
         
        Merci, mais cette simplification ne me sert à rien, je veux pouvoir remplacer le n° de ID : 3424 (que je tape moi même après avoir été consulté le log)
        par le
        grep pid LOG | grep -o '[[:digit:]]*'
        qui va me chercher le n° de pid directement dans la log.
        0
  3. paz59 Messages postés 10 Statut Membre
     
    Alors UnGars pour les renvoi de commandes

    ps -ef | egrep -vw '(ps|egrep)' | egrep 3424

    renvoi (si le PID : 3424 est en cours) quelque chose du type :

    root 3424 1 0 2015 ? 00:00:04 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid

    sinon il ne renvoi rien

    ------------------------------------------------------------------------------------

    grep pid LOG | grep -o '[[:digit:]]*' 

    renvoi le n° de l'ID en cherchant dans la log la ligne faisant référence au PID et en extrayant juste le numérique

    bakwebek  3439  3079  0 07:07
    bakwebek  3950  3439  0 07:09
    le package semble tourne dans le pid 3439 toujours en cours
    bakwebek  3439  3079  0 07:07 ?        00:00:00 /bin/ksh /appli01/bakweb/com/cde_ext_flxe_brt.com
    bakwebek  3950  3439  0 07:09 ?        00:00:00 /bin/ksh /appli01/bakweb/com/cde_flxe_brt_pos.com
    fin de traitement
    [[[ le package est deja en train de tourner


    la partie grep pid log.log me retour donc ceci :

    "le package semble tourne dans le pid 3439 toujours en cours"

    et la partie grep -o '[[:digit:]]*' extrait le 3439
    0
  4. jisisv Messages postés 3678 Statut Modérateur 936
     
    Utilise pgrep et/ou l'option -p de ps (lire la man page pour toutes les variations)

    exemple:
    johand@bata:~/tmp$ ps -f  -p $(pgrep iceweasel)
    UID PID PPID C STIME TTY TIME CMD
    johand 5422 2754 2 2015 ? 06:55:22 iceweasel

    0