grep -v "grep"pobiera dane wejściowe linia po linii i wyświetla tylko te linie, w których grepsię nie pojawia. Bez -vtego wyświetlałby tylko linie, w których grep się pojawia. Zobacz man grepszczegóły.
Jeśli chodzi o samo grepnarzędzie, nie ma znaczenia, że wzorzec grepprzekazany mu jako argument jest taki sam jak jego nazwa. Ale w większości przypadków, gdy grep -v grepfaktycznie się pojawia, nie jest to przypadek.
grep -v grep(lub grep -v 'grep'lub grep -v "grep") często pojawia się po prawej stronie potoku, którego lewa strona jest pspoleceniem. Prawdopodobnie tam, gdzie to widziałeś. Na przykład mogę szukać programów, których nazwy, ścieżki lub argumenty wiersza poleceń sugerują, że są one powiązane z 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
Moje greppolecenie pojawiło się w danych wyjściowych, ale nie tego szukam. Szukam informacji o procesach, które już działały, gdy sprawdzałem, co się dzieje, a nie o procesie, który działał tylko z powodu mojego wysiłku, aby zbadać, co się dzieje.
Jednym z powszechnych sposobów na usunięcie tego rozproszenia jest dodanie kolejnej potoku do 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
grepbez -Ftraktuje wzorzec jako wyrażenie regularne, a nie stały ciąg . Tak więc innym podejściem jest napisanie wyrażenia regularnego, które pasuje dokładnie, xfceale jest napisane inaczej. Na przykład:
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
Działa [x]to, ponieważ jest to klasa znaków, która dokładnie pasuje do litery x.
Wadą tych popularnych metod jest to, że odfiltrowują linie zawierające grepnawet te, które nie są greppoleceniem, które sam wykonałeś. Mogą to nawet nie być greppolecenia - tylko polecenia, których nazwy, ścieżki lub argumenty wiersza poleceń zawierają grep . Tak więc, jak zauważył Sergiy Kolodyazhnyy , często żaden z tych sposobów (ani żadne inne podejście obejmujące potokowanie wyników ps) nie jest naprawdę idealny i, jak wspomniał Nic Hartley , inne sposoby często wykorzystują pgrep. Na przykład:
ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
-a pokazuje pełną linię poleceń. Pomiń, aby wyświetlić tylko numer identyfikacyjny procesu.
-f wyszukuje w pełnym wierszu poleceń. Pomiń, aby wyszukać tylko nazwy.
man grepprzeczytać referencyjną stronę instrukcji dla polecenia lub uzyskać więcej informacji na temat niektórych poleceń (w tym grep), które możeszinfo grep.... tj. twój system ma dokumentację, która często jest bardzo przydatna.