Поиск по сайту:

В чем разница между Grep, Egrep и Fgrep в Linux?


Одним из известных инструментов поиска в Unix-подобных системах, который можно использовать для поиска чего угодно, будь то файл, строка или несколько строк в файле, является утилита grep. Он очень обширен по функциональности, что можно объяснить большим количеством поддерживаемых опций, таких как: поиск с использованием строкового шаблона, шаблона регулярного выражения или регулярного выражения на основе Perl и т. д.

Из-за различных функциональных возможностей у него есть множество вариантов, включая grep, egrep (расширенный GREP), fgrep (Исправленный GREP), pgrep (GREP процесса), rgrep (Рекурсивный GREP) и т. д. Но эти варианты имеют незначительные отличия от исходного grep, что сделало их популярными и позволяет использовать их различными программистами Linux для конкретных задач.

Главное, что еще предстоит выяснить, это различия между тремя основными вариантами, то есть 'grep', 'egrep' и 'fgrep'. grep, который заставляет пользователей Linux выбирать ту или иную версию в соответствии с требованиями.

Некоторые специальные метасимволы grep

  1. + — эквивалент одного или нескольких вхождений предыдущего символа.
  2. ? — обозначает почти 1 повторение предыдущего символа. Например: a? Будет соответствовать ’a’ или ’aa’.
  3. ( – начало выражения чередования.
  4. ) – конец выражения чередования.
  5. | – соответствует любому из выражений, разделенных '|'. Например: “(a|b)cde ” будет соответствовать либо abcde, либо bbcde.
  6. { — этот метасимвол указывает начало спецификатора диапазона. Например: «a{2}» соответствует «aa» в файле, т. е. a 2 раза.
  7. — этот метасимвол указывает на конец спецификатора диапазона.

Различия между grep, egrep и fgrep

Некоторые основные различия между grep, egrep и fgrep можно выделить следующим образом. В этом наборе примеров мы предполагаем, что файл, над которым выполняется операция:

Греп-команда

grep или Global Regular Expression Print — это основная программа поиска в Unix-подобных системах, которая может искать любой тип строки в любом файле или списке файлов или даже выводить любые команда.

Рекомендуется к прочтению: 12 практических примеров команды grep в Linux

В качестве шаблона поиска помимо обычных строк используются базовые регулярные выражения. В базовых регулярных выражениях (BRE) такие метасимволы, как: '{','}','(',')','|','+','?' теряют свое значение и обрабатываются как обычные символы строки, и их необходимо экранировать, если их следует рассматривать как специальные символы. .

Рекомендуется к прочтению: 11 дополнительных команд Grep для классов символов и выражений в скобках

Кроме того, grep использует алгоритм Бойера-Мура для быстрого поиска любой строки или регулярного выражения.

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

Как здесь, когда команда запускается без экранирования '(' ')' и '|', она ищет полную строку, т.е. "(f|g )ile » в файле. Но когда специальные символы были экранированы, то вместо того, чтобы рассматривать их как часть строки, grep рассматривал их как метасимволы и искал слова «файл» или «gile» в файле.

Команда Эгреп

Egrep или grep -E — это еще одна версия grep или расширенная grep. Эта версия grep эффективна и быстра, когда дело доходит до поиска шаблона регулярного выражения, поскольку она обрабатывает метасимволы как есть и не заменяет их строками, как в grep, и, следовательно, вы освобождаетесь от бремени экранирования их как в греп. Он использует ERE или набор расширенных регулярных выражений.

В случае egrep, даже если вы не экранируете метасимволы, они будут рассматриваться как специальные символы и заменять их специальным значением вместо того, чтобы рассматривать их как часть строки.

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

Как и здесь, egrep искал строку “file ”, когда метасимволы не были экранированы, как это следует из значения этих символов. Но когда эти символы были экранированы, egrep рассматривал их как часть строки и искал в файле полную строку “(f|g)ile ”.

Команда fgrep

Fgrep или Fixed grep или grep -F — это еще одна версия grep, которая обеспечивает быстрый поиск по всей строке. вместо регулярного выражения, поскольку он не распознает ни регулярные выражения, ни метасимволы. Для поиска любой прямой строки следует выбрать именно эту версию grep.

Fgrep ищет полную строку и даже не распознает специальные символы как часть регулярного выражения, даже если они экранированы или не экранированы.

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

Например, когда метасимволы не были экранированы, fgrep искал полную строку “(f|g)ile ” в файле, а когда метасимволы были экранированы, команда fgrep искала “\(f\|g\)ile ” все символы, как есть в файле.

Мы уже рассмотрели некоторые практические примеры команды grep. Вы можете прочитать их здесь, если хотите получить больше от команды grep в Linux.

Изучите 12 практических примеров команды grep в Linux

Заключение

Выше выделены различия между ’grep’, ’egrep’ и ’fgrep’. Помимо различий в наборе используемых регулярных выражений и скорости выполнения, остальные параметры командной строки остаются одинаковыми для всех трех версий grep и даже вместо «egrep» или «fgrep», «grep -E» или «grep -». F” рекомендуется использовать.

Если вы обнаружите какие-либо другие различия между этими тремя версиями grep, укажите их в своих комментариях.