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

Résolu/Fermé
paz59 Messages postés 9 Date d'inscription vendredi 8 janvier 2016 Statut Membre Dernière intervention 11 février 2016 - 8 janv. 2016 à 12:14
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 12 janv. 2016 à 23:46
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

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 9/01/2016 à 16:18
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
Super j'essai ça lundi et je vous fait un retour, mais je le sens bien.

Merci d'avance
0
paz59 Messages postés 9 Date d'inscription vendredi 8 janvier 2016 Statut Membre Dernière intervention 11 février 2016
12 janv. 2016 à 20:52
Ca marche capitaine, ça marche
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
12 janv. 2016 à 23:46
:-) Parfait, bonne continuation !
0
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
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
paz59 Messages postés 9 Date d'inscription vendredi 8 janvier 2016 Statut Membre Dernière intervention 11 février 2016 > UnGars
Modifié par paz59 le 8/01/2016 à 14:31
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
paz59 Messages postés 9 Date d'inscription vendredi 8 janvier 2016 Statut Membre Dernière intervention 11 février 2016
8 janv. 2016 à 14:27
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
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
11 janv. 2016 à 19:48
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