Chciałbym spacer przez na różnicach pomiędzy grep
, pgrep
, egrep
, i fgrep
oraz w jaki sposób z nich korzystać.
linux
command-line
grep
Eric Leschinski
źródło
źródło
Odpowiedzi:
Różnice między grep, pgrep, egrep i fgrep (Linux):
grep
grep to akronim oznaczający „Global Express Expressions Print”. grep to program, który skanuje określony plik lub pliki linia po linii, zwracając linie zawierające wzorzec. Wzorzec jest wyrażeniem określającym zestaw ciągów poprzez interpretację znaków jako metaznaków. Na przykład metaznak gwiazdki (*) jest interpretowany jako „zero lub więcej poprzedniego elementu”. Umożliwia to użytkownikom wpisanie krótkiej serii znaków i znaków meta w poleceniu grep, aby komputer pokazał nam, które wiersze pasują do plików.
Standardowe polecenie grep wygląda następująco:
grep drukuje wyniki wyszukiwania na ekranie (standardowe wyjście) i zwraca następujące wartości wyjściowe:
Niektóre typowe flagi to:
-c
do zliczania liczby udanych dopasowań i nie drukowania rzeczywistych dopasowań,-i
aby rozróżnić wielkość liter w wyszukiwaniu,-n
aby wydrukować numer linii przed wydrukiem każdego dopasowania,-v
aby uzupełnić wyrażenie regularne (tj. Zwrócić linie, które nie pasujące) i-l
aby wydrukować nazwy plików z wierszami pasującymi do wyrażenia.egrep
egrep to akronim oznaczający „Extended Global Regular Expressions Print”.
„E” w egrep oznacza traktowanie wzorca jako wyrażenia regularnego. „Rozszerzone wyrażenia regularne” w skrócie „ERE” są włączone w egrep. egrep (który jest taki sam jak
grep -E
) traktuje+
,?
,|
,(
, i)
jak meta-znaków.W podstawowych wyrażeń regularnych (z grep), meta-znaków
?
,+
,{
,|
,(
, i)
tracą swoje szczególne znaczenie. Jeśli chcesz grep do leczenia tych znaków jako meta-znaków, uniknąć ich\?
,\+
,\{
,\|
,\(
, i\)
.Na przykład tutaj grep używa podstawowych wyrażeń regularnych, w których plus jest traktowany dosłownie, zwracana jest każda linia z plusem.
Z drugiej strony egrep traktuje „+” jako znak meta i zwraca każdą linię, ponieważ plus jest interpretowany jako „jeden lub więcej razy”.
Tutaj zwracana jest każda linia, ponieważ
+
była traktowana przez egrep jako znak meta. normalny grep szukałby tylko linii z literałem+
.fgrep
fgrep to akronim oznaczający „globalny wyrażenia regularne o stałym ciągu znaków”.
fgrep (który jest taki sam jak grep -F) jest stałym lub szybkim grep i zachowuje się jak grep, ale NIE rozpoznaje żadnych metaznaków wyrażeń regularnych jako specjalnych. Wyszukiwanie zakończy się szybciej, ponieważ przetwarza tylko prosty ciąg znaków, a nie złożony wzór.
Na przykład, jeśli chciałbym przeszukać mój .bash_profile dosłowną kropkę (.), Wówczas użycie grep byłoby trudne, ponieważ musiałbym uciec przed kropką, ponieważ kropka jest meta znakiem, który oznacza „symbol wieloznaczny, dowolny pojedynczy znak”:
Powyższe polecenie zwraca każdą linię pliku mojplik.txt. Zrób to zamiast tego:
Potem tylko linie, które mają dosłowne „”. w nich są zwracane. fgrep pomaga nam nie zawracać sobie głowy ucieczką przed naszymi meta znakami.
pgrep
pgrep to akronim oznaczający „druk globalnych wyrażeń regularnych Process-ID”.
pgrep przegląda obecnie uruchomione procesy i wyświetla identyfikatory procesów, które pasują do kryteriów wyboru dla standardowego wyjścia. pgrep jest przydatny, gdy wszystko, co chcesz wiedzieć, to liczba całkowita procesu. Na przykład, jeśli chcę znać tylko identyfikator procesu mojego procesu mysql, użyłbym polecenia,
pgrep mysql
które zwróci identyfikator procesu taki jak 7312.źródło
pgrep
instrukcji : nazwa procesu używana do dopasowania jest ograniczona do 15 znaków obecnych w danych wyjściowych / proc / pid / stat . Użyj opcji -f, aby dopasować do pełnej linii poleceń, / proc / pid / cmdline .