Was bedeutet grep -v „grep“ und was macht es?

17

Ich habe mich gefragt, was grep -v "grep"macht und was es bedeutet?

Joe
quelle
8
Sie können 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.
Guiverc
12
grep -v "grep"wird oft verwendet, um grep selbst herauszufiltern, während Prozesse aufgelistet werden, und das beinhaltet normalerweise 3 Pipelines, obwohl es natürlich bessere Methoden gibt, pgrepdie viel weniger "Klempnerarbeiten" ermöglichen. Siehe unix.stackexchange.com/q/74185/85039
Sergiy Kolodyazhnyy
13
Das tut es. Ich rufe mein Rootkit an grep.
Joshua
Wird normalerweise in einem nicht sicherheitsrelevanten Kontext verwendet, z. B. ps aux | grep fubar | grep -v grepwo fubarist etwas, das ich entwickle, das nicht mehr reagiert und dessen ID ich finden möchte, damit ich es töten kann. Angenommen, es gibt zwei davon, killallist dies nicht angemessen.
Nigel222

Antworten:

69

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.
Eliah Kagan
quelle
10
Es kann auch erwähnenswert sein, pgrepfür eine andere Alternative zups | grep
Fund Monica Lawsuit
8

grep --helpsagt uns was -vflag macht:

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

Sie können -vflag zum Drucken verwenden , um die Übereinstimmung umzukehren. Das heißt, es werden nur die Zeilen gefunden, die das angegebene Wort nicht enthalten. Zum Beispiel alle Zeilen drucken, die die Wortleiste nicht enthalten:

$ grep -v bar /path/to/file

( lesen Sie mehr ... )

Karlom
quelle