grep -v "grep"
Übernimmt die Eingabe zeilenweise und gibt nur die Zeilen aus, in denen grep
sie nicht vorkommen. Ohne -v
wäre es Ausgabe nur die Zeilen , in denen grep
nicht erscheinen. Siehe man grep
für weitere Einzelheiten.
Für das grep
Dienstprogramm selbst ist es unwichtig, dass das grep
als Argument übergebene Muster mit dem Namen identisch ist. In den meisten Fällen grep -v grep
ist dies jedoch kein Zufall.
grep -v grep
(oder grep -v 'grep'
oder grep -v "grep"
) erscheint oft auf der rechten Seite einer Pipe, deren linke Seite ein ps
Befehl ist. Das ist wahrscheinlich, wo Sie es gesehen haben. Ich suche beispielsweise nach laufenden Programmen, deren Namen, Pfade oder Befehlszeilenargumente darauf hindeuten, dass sie mit Xfce zusammenhängen:
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
Mein grep
Befehl wurde in der Ausgabe angezeigt, aber es ist nicht das, wonach ich suche. Ich suche nach Informationen zu Prozessen, die bereits ausgeführt wurden, als ich untersuchte, was ausgeführt wurde, und nicht zu dem Prozess, der nur ausgeführt wird, weil ich versucht habe, zu überprüfen, was ausgeführt wird.
Ein üblicher Weg, um diese Ablenkung zu beseitigen, ist das Hinzufügen einer weiteren Pipe zu 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
grep
without -F
behandelt sein Muster eher als regulären Ausdruck als als festen String . Ein weiterer Ansatz besteht darin, einen regulären Ausdruck zu schreiben, der genau übereinstimmt, xfce
aber anders geschrieben ist. Beispielsweise:
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
Dies funktioniert, da [x]
es sich um eine Zeichenklasse handelt , die genau dem Buchstaben entspricht x
.
Ein Nachteil dieser populären Methoden ist, dass sie Zeilen herausfiltern, die enthalten, grep
auch wenn sie nicht der grep
Befehl sind, den Sie gerade selbst ausgeführt haben. Es handelt sich möglicherweise nicht einmal um grep
Befehle, sondern nur um Befehle, deren Namen, Pfade oder Befehlszeilenargumente enthalten grep
. Also, wie Sergiy Kolodyazhnyy betont hat, ist oft keiner dieser Wege (oder irgendein anderer Ansatz, der das Leiten der Ausgabe beinhaltet ps
) wirklich ideal und, wie Nic Hartley erwähnte , andere Wege werden oft verwendet pgrep
. Beispielsweise:
ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
-a
Zeigt die vollständige Befehlszeile an. Lassen Sie es weg, um nur die Prozess-ID-Nummer anzuzeigen.
-f
Sucht in der vollständigen Befehlszeile. Lassen Sie es aus, um nur die Namen zu suchen.
man grep
die Referenzhandbuchseite für den Befehl lesen oder für weitere Informationen zu bestimmten Befehlen (inkl. Grep)info grep
.... dh. Ihr System verfügt über eine Dokumentation, die oft sehr praktisch ist.