grep -v "grep"Übernimmt die Eingabe zeilenweise und gibt nur die Zeilen aus, in denen grepsie nicht vorkommen. Ohne -vwäre es Ausgabe nur die Zeilen , in denen grep nicht erscheinen. Siehe man grepfür weitere Einzelheiten.
Für das grepDienstprogramm selbst ist es unwichtig, dass das grepals Argument übergebene Muster mit dem Namen identisch ist. In den meisten Fällen grep -v grepist 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 psBefehl 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 grepBefehl 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
grepwithout -Fbehandelt 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, xfceaber 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, grepauch wenn sie nicht der grepBefehl sind, den Sie gerade selbst ausgeführt haben. Es handelt sich möglicherweise nicht einmal um grepBefehle, 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 grepdie 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.