Que signifie et fait grep -v «grep»?

17

Je me demandais ce grep -v "grep"que cela signifie et ce que cela signifie?

Joe
la source
8
Vous pouvez man greplire la page de manuel de référence pour la commande, ou pour plus d'informations sur certaines commandes (inc. Grep), vous pouvez info grep.... ie. votre système possède une documentation qui est souvent très pratique.
guiverc
12
grep -v "grep"est souvent utilisé pour filtrer grep lui-même tout en listant les processus et cela implique généralement 3 pipelines, bien qu'il existe bien sûr de meilleures méthodes comme celles pgrepqui permettent beaucoup moins de "plomberie". Voir unix.stackexchange.com/q/74185/85039
Sergiy Kolodyazhnyy
13
Ça le fait. J'appelle mon rootkit grep.
Joshua
Normalement utilisé dans un contexte non lié à la sécurité, comme ps aux | grep fubar | grep -v grepfubarest quelque chose que je suis en train de développer, qui a cessé de répondre, et dont l'ID je veux trouver afin que je puisse le tuer. Supposons qu'il y en ait deux, ce qui killallest inapproprié.
nigel222

Réponses:

69

grep -v "grep"prend entrée ligne par ligne et ne produit que les lignes dans lesquelles grepn'apparaît pas. Sans -v, il sortie que les lignes qui n'apparaissent. Voir pour plus de détails.grep man grep

En ce qui concerne l' greputilitaire lui-même, il est sans importance que le modèle qui lui est greppassé en argument soit le même que son nom. Mais dans la plupart des cas où grep -v grepapparaît réellement, ce n'est pas un hasard.

grep -v grep(ou grep -v 'grep'ou grep -v "grep") apparaît souvent sur le côté droit d'un tuyau dont le côté gauche est une pscommande. C'est probablement là que vous l'avez vu. Par exemple, je recherche peut-être des programmes en cours d'exécution dont les noms, les chemins ou les arguments de ligne de commande suggèrent qu'ils sont liés à Xfce:

ek@Io:~$ ps x | grep xfce
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
31901 pts/1    S+     0:00 grep --color=auto xfce

ma grep commande a été affichée dans la sortie, mais ce n'est pas ce que je recherche. Je recherche des informations sur les processus qui étaient déjà en cours d'exécution lorsque j'ai examiné ce qui était en cours d'exécution, pas le processus qui s'exécute uniquement en raison de mes efforts pour examiner ce qui est en cours d'exécution.

Une façon courante de supprimer cette distraction consiste à ajouter un autre tuyau à grep -v grep:

ek@Io:~$ ps x | grep xfce | grep -v grep
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd

grepsans -Ftraite son modèle comme une expression régulière plutôt que comme une chaîne fixe . Une autre approche consiste donc à écrire une expression régulière qui correspond exactement xfcemais qui est écrite différemment. Par exemple:

ek@Io:~$ ps x | grep '[x]fce'
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd

Cela fonctionne parce que [x]c'est une classe de caractères qui correspond exactement à la lettrex .


Un inconvénient de ces méthodes populaires est qu'elles filtreront les lignes qui contiennent grepmême lorsqu'elles ne sont pas la grepcommande que vous venez d' exécuter vous-même. Ce ne sont peut-être même pas des grepcommandes - juste des commandes dont les noms, les chemins ou les arguments de ligne de commande contiennent grep . Ainsi, comme l' a souligné Sergiy Kolodyazhnyy , souvent aucune de ces méthodes (ni aucune autre approche impliquant la canalisation de la sortie de ps) n'est vraiment idéale et, comme Nic Hartley l'a mentionné , d' autres méthodes sont souvent utilisées pgrep. Par exemple:

ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
  • -a spectacles la ligne de commande complète. Omettez-le pour afficher uniquement le numéro d'identification du processus.
  • -f recherche en ligne de commande complète. Omettez-le pour rechercher uniquement les noms.
Eliah Kagan
la source
10
Il peut également être utile de mentionner pgrepune autre alternative àps | grep
Fund Monica's Lawsuit
8

grep --helpnous dit ce que fait le -vdrapeau:

-v, --invert-match        select non-matching lines

Vous pouvez utiliser le -vdrapeau pour imprimer inverse la correspondance; c'est-à-dire qu'il ne correspond qu'aux lignes qui ne contiennent pas le mot donné. Par exemple, imprimez toutes les lignes qui ne contiennent pas la barre de mots:

$ grep -v bar /path/to/file

(en savoir plus ... )

Karlom
la source