Egrep - Exclure la commande grep elle-même

Résolu
Bonjour,

bon je n'arrive pas a trouvé la bonne syntaxe avec egrep

Mon but est de récupérer les lignes contenant openerp-*.py suite a la commande
ps -ef
donc j'ai fait :

ps -ef | egrep 'openerp.*py' | tr -s " " "|" | cut -d "|" -f9 > fichier


Mon souci c'est que cela ma récupérer également l'openerp de ma commande egrep et je ne souhaite pas puisque c'est pour vérifier si j'ai des proccess openerp actifs qui tournent.

Comment puis je faire pour récupérer les process sans celui de ma commande egrep?

Merci



L'accès au savoir est la première liberté que chaque homme devrait avoir.

2 réponses

Résumé de la discussion

L’objectif est d’identifier les processus openerp-*.py à partir de ps -ef sans que la commande egrep elle-même ne soit affichée dans le résultat, par exemple. Des solutions courantes consistent à exclure la ligne de egrep ou à modifier le motif pour éviter de capturer le processus qui exécute la commande. Pour éviter que le processus egrep ne soit lui-même ciblé, on peut modifier le motif avec des crochets, par exemple ps -ef | egrep 'openerp.*py' et filtrer la ligne correspondante, ou employer une commande équivalente. D'autres solutions permettent d’éviter totalement le problème, notamment en utilisant des outils dédiés comme pgrep qui renvoient les processus correspondants sans inclure l’instance de recherche.

Bobot (l’IA à votre service)
  1. Modérateur
    Salut,

    ps -ef | egrep 'o[p]enerp.*py' | tr -s " " "|" | cut -d "|" -f9

    ;-))
    0
    1. Webmaster
      Juste pour comprendre, en quoi le fait de préciser [p] élimine le openerp présent dans la commande ps ?
      0
    2. Modérateur
      Salut,

      Ta question c'est plutôt : en quoi le fait de préciser [p] élimine le openerp présent dans la commande grep ?
      Et non dans la commande "ps" ;-))

      Pour simplifier j'ai enlevé l'astérisque (quantificateur) de la commande qui suit...

      Alors si on laisse "ps -ef | egrep 'openerp.py", grep recherche la chaine openerp.py dans la liste affichée par "ps -ef" et trouve naturellement les occurrences propres aux programmes mais aussi celle du processus "grep", alors qu'en rajoutant un crochet, qui n'est interprété que par grep comme une expression régulière (liste de caractères), il ne trouve que les occurrences propres aux programmes mais ignore la chaine de caractère littérale "o[p]enerp.py", les crochets n'étant pas développés mais interprétés littéralement...

      ;-))
      0
    3. Merci jipicy, cela fonctionne. Je rejoints la question de Jeff. En quoi le fait de mettre p entre crochets élimine le fait d'afficher ce qui est dans egrep?
      0
    4. Modérateur
      Voir explications ci-dessus ;-))
      0
    5. Modérateur
      Salut,

      mais ignore la chaine de caractère littérale "o[p]enerp.py", les crochets n'étant pas développés mais interprétés littéralement...

      Comment ça?!
      Pour que les crochets soient interprétés littéralement il faut un backslash \[p\] sinon avec egrep 'o[p]enerp.*py' egrep devrait pouvoir reconnaître.

      oenerppy
      oenerpJKLJERKLJpy
      opernerppy
      openerpUIORUL454545py
      ....
      0
  2. Merci pour l'explication c'est claire maintenant.
    0