Możesz man grepprzeczytać referencyjną stronę instrukcji dla polecenia lub uzyskać więcej informacji na temat niektórych poleceń (w tym grep), które możesz info grep.... tj. twój system ma dokumentację, która często jest bardzo przydatna.
guiverc
12
grep -v "grep"jest często używany do odfiltrowywania samego grepa podczas listowania procesów, i który zazwyczaj obejmuje 3 potoki, chociaż istnieją oczywiście lepsze metody, pgrepktóre pozwalają na znacznie mniejszą „hydraulikę”. Zobacz unix.stackexchange.com/q/74185/85039
Sergiy Kolodyazhnyy
13
To wystarczy Dzwonię do mojego rootkita grep.
Joshua
Zwykle używany w kontekście niezwiązanym z bezpieczeństwem, np. ps aux | grep fubar | grep -v grepGdzie fubarcoś rozwijam, które przestało odpowiadać i którego identyfikator chcę znaleźć, aby go zabić. Załóżmy, że są dwa z nich, więc killalljest niewłaściwe.
nigel222
Odpowiedzi:
69
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 grepsię 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?Ssl0: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?Ssl0: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?Ssl0: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:
Warto też wspomnieć pgrepo innej alternatywieps | grep
pozew
8
grep --helpmówi nam, co -vrobi flaga:
-v,--invert-match select non-matching lines
Możesz użyć -vflagi, aby wydrukować odwraca dopasowanie; oznacza to, że pasuje tylko do tych wierszy, które nie zawierają danego słowa. Na przykład wydrukuj wszystkie wiersze, które nie zawierają paska słów:
man grep
przeczytać 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.grep -v "grep"
jest często używany do odfiltrowywania samego grepa podczas listowania procesów, i który zazwyczaj obejmuje 3 potoki, chociaż istnieją oczywiście lepsze metody,pgrep
które pozwalają na znacznie mniejszą „hydraulikę”. Zobacz unix.stackexchange.com/q/74185/85039grep
.ps aux | grep fubar | grep -v grep
Gdziefubar
coś rozwijam, które przestało odpowiadać i którego identyfikator chcę znaleźć, aby go zabić. Załóżmy, że są dwa z nich, więckillall
jest niewłaściwe.Odpowiedzi:
grep -v "grep"
pobiera dane wejściowe linia po linii i wyświetla tylko te linie, w którychgrep
się nie pojawia. Bez-v
tego wyświetlałby tylko linie, w którychgrep
się pojawia. Zobaczman grep
szczegóły.Jeśli chodzi o samo
grep
narzędzie, nie ma znaczenia, że wzorzecgrep
przekazany mu jako argument jest taki sam jak jego nazwa. Ale w większości przypadków, gdygrep -v grep
faktycznie się pojawia, nie jest to przypadek.grep -v grep
(lubgrep -v 'grep'
lubgrep -v "grep"
) często pojawia się po prawej stronie potoku, którego lewa strona jestps
poleceniem. 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:Moje
grep
polecenie 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
:grep
bez-F
traktuje 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,xfce
ale jest napisane inaczej. Na przykład:Działa
[x]
to, ponieważ jest to klasa znaków, która dokładnie pasuje do literyx
.Wadą tych popularnych metod jest to, że odfiltrowują linie zawierające
grep
nawet te, które nie sągrep
poleceniem, które sam wykonałeś. Mogą to nawet nie byćgrep
polecenia - 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ówps
) nie jest naprawdę idealny i, jak wspomniał Nic Hartley , inne sposoby często wykorzystująpgrep
. Na przykład:-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.źródło
pgrep
o innej alternatywieps | grep
grep --help
mówi nam, co-v
robi flaga:Możesz użyć
-v
flagi, aby wydrukować odwraca dopasowanie; oznacza to, że pasuje tylko do tych wierszy, które nie zawierają danego słowa. Na przykład wydrukuj wszystkie wiersze, które nie zawierają paska słów:( czytaj więcej ... )
źródło