[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