[linux-leman] truc et astuce: filtrer la commande ps
Daniel Cordey
dc at mjt.ch
Thu May 1 08:24:17 CEST 2003
On Wednesday 30 April 2003 18:31, briner wrote:
> il est possible d'écrire
> ps -ef | grep [P]rocessus
> ...
> Elle fonctionne car l'expression régulière «[P]rocessus» recherche tous
> les mots qui commencent par la lettre «P» suivit par «rocessus». Comme
> lors de l'affichage par la commande «ps», la commande grep sera affichée
> avec les caractères «[]», la commande «grep [P]rocessus» ne
> sélectionnera pas cette ligne.
l'expression "grep [P]rocessus" est absolument équivalente à "grep Processus".
l'utilisation des [] permet de définir un "groupe" de caractères. Ceci serait
très utile dans le cas où l'on voudrait détecter P majuscule ou minuscule.
Alors, on écrirait "grep [Pp]rocessus". Sinon, dans l'exemple ci-dessus, la
présence des [] est inutile.
Concernant l'économie du second grep (fgrep). Il est destiné à suprimé la
présence du premier grep de recherche. Or, si cela fonctionne, l'explication
met à jour une erreur d'interprétation. En fait, la commande "grep
[P]rocessus" est écrite sans avoir utiliser ' ou "... c'est à dire que les
caractères [] ont en fait été interprétés par le shell !!! Et oui, ce sont
aussi des méta-caractères du shell. Donc, le shell "réalise" l'évaluation, et
exécute le résultat. Mais la chaîne de caractère se trouvant dans la liste
des process contient toujours les []. Ce qui fait que le grep ne prendra pas
la ligne contenant les [].
Si l'on met des ' ou " (ce que je recommande), il est alors nécessaire de
s'assurer de ne pas prendre notre propre grep; d'où l'utilisation du "grep
'v". Mais si l'on est puriste et que l'on cherche vraiment la performance en
limitant le nombre de processus, il faudrait écrire :
ps -ef | grep '[0-9] Processus'
Daniel
More information about the gull
mailing list