Wyszukiwanie w witrynie

Jaka jest różnica między Grep, Egrep i Fgrep w systemie Linux?


Jednym z renomowanych narzędzi wyszukiwania w systemach uniksowych, którego można używać do wyszukiwania czegokolwiek, niezależnie od tego, czy jest to plik, linia czy wiele linii w pliku, jest narzędzie grep. Ma bardzo szeroką funkcjonalność, co można przypisać dużej liczbie obsługiwanych opcji, takich jak: wyszukiwanie przy użyciu wzorca ciągu, wzorca reg-ex lub reg-ex opartego na Perlu itp.

Ze względu na różne funkcjonalności ma wiele wariantów, w tym grep, egrep (rozszerzony GREP), fgrep (Naprawiono GREP), pgrep (Przetwarzanie GREP), rgrep (Rekurencyjny GREP) itp. Ale te warianty różnią się nieznacznie od oryginalnego grep, co uczyniło je popularnymi i używanymi przez różnych programistów Linuksa do określonych zadań.

Najważniejszą rzeczą, którą należy zbadać, są różnice między trzema głównymi wariantami, tj. „grep”, „egrep” i „fgrep” grep, który sprawia, że użytkownicy Linuksa wybierają jedną lub drugą wersję zgodnie z wymaganiami.

Niektóre specjalne metaznaki grep

  1. + – Odpowiednik jednego lub większej liczby wystąpień poprzedniego znaku.
  2. ? – oznacza prawie 1 powtórzenie poprzedniego znaku. Na przykład: a? Pasuje do „a” lub „aa”.
  3. ( – Początek wyrażenia alternatywnego.
  4. ) – Koniec wyrażenia alternatywnego.
  5. | – Dopasowanie dowolnego wyrażenia oddzielonego '|'. Na przykład: „(a|b)cde ” będzie pasować do „abcde” lub „bbcde”.
  6. { – ten metaznak wskazuje początek specyfikatora zakresu. Na przykład: „a{2} ” dopasowuje „aa ” w pliku, tj. a 2 razy.
  7. – ten metaznak wskazuje specyfikator końca zakresu.

Różnice między grepem, egrepem i fgrepem

Niektóre główne różnice między grep, egrep i fgrep można wyróżnić w następujący sposób. Dla tego zestawu przykładów zakładamy, że plik, na którym wykonywana jest operacja, to:

Dowództwo Grepa

grep lub Global Regular Expression Print to główny program wyszukujący w systemach uniksowych, który może wyszukiwać dowolny typ ciągu znaków w dowolnym pliku lub liście plików, a nawet danych wyjściowych dowolnego Komenda.

Sugerowana lektura: 12 praktycznych przykładów polecenia grep w systemie Linux

Używa podstawowych wyrażeń regularnych oprócz normalnych ciągów znaków jako wzorca wyszukiwania. W podstawowych wyrażeniach regularnych (BRE) metaznaki takie jak: '{','}', '(',')', '|','+','?' tracą swoje znaczenie i są traktowane jak zwykłe znaki ciągu znaków i należy je zmienić, jeśli mają być traktowane jako znaki specjalne .

Sugerowana lektura: 11 zaawansowanych poleceń „Grep” dotyczących klas znaków i wyrażeń w nawiasach

Ponadto grep wykorzystuje algorytm Boyera-Moore'a do szybkiego wyszukiwania dowolnego ciągu znaków lub wyrażenia regularnego.

grep -C 0 '(f|g)ile' check_file
grep -C 0 '\(f\|g\)ile' check_file

Podobnie jak tutaj, gdy polecenie zostanie uruchomione bez ucieczki przed '(' ')' i '|', wówczas wyszukane zostanie cały ciąg, tj. “(f|g )ile ” w pliku. Ale kiedy znaki specjalne zostały zmienione, zamiast traktować je jako część ciągu, grep traktował je jako metaznaki i wyszukiwał słowa „plik” lub „gile” w pliku.

Dowództwo Egrepu

Egrep lub grep -E to kolejna wersja grep lub rozszerzonego grepa. Ta wersja grepa jest wydajna i szybka, jeśli chodzi o wyszukiwanie wzorca wyrażeń regularnych, ponieważ traktuje metaznaki w niezmienionej postaci i nie zastępuje ich ciągami znaków jak w grep, dzięki czemu jesteś wolny od ciężaru ucieczki od nich jako w grep. Używa ERE lub zestawu rozszerzonych wyrażeń regularnych.

W przypadku egrep, nawet jeśli nie uciekniesz od metaznaków, potraktuje je jako znaki specjalne i zastąpi je ich specjalnym znaczeniem, zamiast traktować je jako część łańcucha.

egrep -C 0 '(f|g)ile' check_file
egrep -C 0 '\(f\|g\)ile' check_file

Podobnie jak tutaj, egrep wyszukiwał ciąg „plik”, gdy metaznaki nie zostały zmienione, co oznaczałoby znaczenie tych znaków. Kiedy jednak te znaki zostały zmienione, egrep potraktował je jako część łańcucha i wyszukał w pliku cały ciąg „(f|g)ile ”.

Polecenie fgrep

Fgrep lub Naprawiono grep lub grep -F to kolejna wersja grep, która umożliwia szybkie wyszukiwanie całego ciągu znaków zamiast wyrażenia regularnego, ponieważ nie rozpoznaje wyrażeń regularnych ani żadnych metaznaków. Aby przeszukać dowolny ciąg bezpośredni, należy wybrać tę wersję grep.

Fgrep wyszukuje pełny ciąg znaków i nie rozpoznaje nawet znaków specjalnych jako części wyrażeń regularnych, nawet jeśli zostały one zakończone lub niezmienione.

fgrep -C 0 '(f|g)ile' check_file
fgrep -C 0 '\(f\|g\)ile' check_file

Na przykład, gdy metaznaki nie zostały zmienione, fgrep szukał w pliku pełnego ciągu „(f|g)ile ”, a gdy metaznaki zostały zmienione, komenda fgrep szukała „\(f\|g\)ile ” wszystkie znaki takie, jakie są w pliku.

Omówiliśmy już kilka praktycznych przykładów polecenia grep, możesz je przeczytać tutaj, jeśli chcesz uzyskać więcej z polecenia grep w systemie Linux.

Poznaj 12 praktycznych przykładów polecenia grep w systemie Linux

Wniosek

Powyżej podkreślono różnice między „grep”, „egrep” i „fgrep”. Oprócz różnicy w zestawie używanych wyrażeń regularnych i szybkości wykonywania, parametry wiersza poleceń rest pozostają takie same dla wszystkich trzech wersji grep, a nawet zamiast „egrep” lub „fgrep”, „grep -E” lub „grep - F” zaleca się stosować.

Jeśli znajdziesz jakieś inne różnice między tymi trzema wersjami grep, wspomnij o nich w swoich komentarzach.