Jaka jest różnica między grep, pgrep, egrep, fgrep?

Odpowiedzi:

85

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 <flags> '<regular expression>' <filename>

grep drukuje wyniki wyszukiwania na ekranie (standardowe wyjście) i zwraca następujące wartości wyjściowe:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

Niektóre typowe flagi to: -cdo zliczania liczby udanych dopasowań i nie drukowania rzeczywistych dopasowań, -iaby rozróżnić wielkość liter w wyszukiwaniu, -naby wydrukować numer linii przed wydrukiem każdego dopasowania, -vaby uzupełnić wyrażenie regularne (tj. Zwrócić linie, które nie pasujące) i -laby 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.

grep "+" myfile.txt

Z drugiej strony egrep traktuje „+” jako znak meta i zwraca każdą linię, ponieważ plus jest interpretowany jako „jeden lub więcej razy”.

egrep "+" myfile.txt

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”:

grep "." myfile.txt

Powyższe polecenie zwraca każdą linię pliku mojplik.txt. Zrób to zamiast tego:

fgrep "." myfile.txt

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 mysqlktóre zwróci identyfikator procesu taki jak 7312.

Eric Leschinski
źródło
Z pgrepinstrukcji : 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 .
Pablo A