В чем разница между `grep`,` egrep` и `fgrep`?

Может ли кто-нибудь сказать мне технические различия между grep , egrep и fgrep и предоставить подходящие примеры?

Когда мне нужно использовать grep над egrep и наоборот?

  • Расширение параметра в grep
  • grep поиск любого числа в диапазоне
  • Найдите слова с тем же гласным, разделенным согласным
  • Мне нужно найти все домашние каталоги пользователей, перечисленные с помощью grep из / etc / passwd
  • извлекать только подстроку после двойных кавычек - grep
  • Сопоставьте два слова, которые находятся на одной строке
  • Как grep для одиночной цитаты?
  • Regexp в .ssh / config
  • Как я рекурсивно grep через сжатые архивы?
  • что означает grep -v -f / dev / null, что нужно сделать точно?
  • Грепинг по огромной производительности файла
  • Как совместить строку, содержащую символ «$» с grep?
  • 5 Solutions collect form web for “В чем разница между `grep`,` egrep` и `fgrep`?”

    • egrep на 100% эквивалентен grep -E
    • fgrep на 100% эквивалентен grep -F

    Исторически эти коммутаторы предоставлялись в отдельных двоичных файлах. На некоторых действительно старых Unix-системах вы обнаружите, что вам нужно вызывать отдельные двоичные файлы, но во всех современных системах эти переключатели предпочтительнее. На странице man для grep есть сведения об этом.

    Что касается того, что они делают, -E переключает grep в специальный режим, так что выражение оценивается как ERE (Extended Regular Expression) в отличие от его обычного сопоставления с образцом. Подробности этого синтаксиса находятся на странице руководства.

    -E, --extended-regexp
    Интерпретировать PATTERN как расширенное регулярное выражение

    Переключатель -F переключает grep в другой режим, в котором он принимает шаблон, который соответствует, но затем разбивает этот шаблон на одну строку поиска на строку и выполняет поиск OR по любой из строк без какого-либо специального соответствия шаблону.

    -F, --fixed-strings
    Интерпретировать PATTERN как список фиксированных строк, разделенных символами новой строки, любой из которых должен быть сопоставлен.

    Вот несколько примеров сценариев:

    • У вас есть файл со списком десяти имен пользователей Unix в текстовом виде. Вы хотите найти файл группы на своем компьютере, чтобы узнать, есть ли какой-либо из десяти пользователей в каких-либо специальных группах:

       grep -F -f user_list.txt /etc/group 

      Причина, по которой переключатель -F помогает здесь в том, что имена пользователей в вашем файле шаблонов интерпретируются как строки обычного текста. Точки, например, будут интерпретироваться как точки, а не дикие карты.

    • Вы хотите искать, используя причудливое выражение. Например, скобка () может использоваться для обозначения групп с | используется как оператор OR. Вы можете запустить этот поиск с помощью -E :

       grep -E '^no(fork|group)' /etc/group 

      … для возврата строк, начинающихся с «nofork» или «nogroup». Без ключа -E вам придется избегать специальных символов, потому что при обычном сопоставлении с образцом они просто будут искать этот точный шаблон;

       grep '^no\(fork\|group\)' /etc/group 

    От man grep :

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

    Вы используете fgrep или grep -F если вы не хотите, чтобы строка grepped интерпретировалась как шаблон.

    Вы используете egrep или grep -E если вам нужно использовать расширенное регулярное выражение.

    egrep и fgrep в основном эквивалентны grep -E и grep -F (соответственно):

      -E, --extended-regexp Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.) -F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.) 

    Сообщения об ошибках могут отличаться.

    От "man grep":

    доступны три варианта программы egrep, fgrep и rgrep. egrep совпадает с grep -E. fgrep совпадает с grep -F. rgrep совпадает с grep -r. Прямой вызов как egrep или fgrep устарел, но предоставляется, чтобы позволить историческим приложениям полагаться на них для запуска без изменений.

    Если вы ищете стенографическую строку и хотите быть уверенным, что строка, которую вы передали, интерпретируется дословно (т. Е. Без риска сказать, что точка или вопросительный знак будет интерпретироваться как что-то еще) используйте fgrep или egrep -F.

    Что касается разницы между egrep и grep, я думаю, что egrep – это большая часть времени, которое вы хотите. На сайте руководства GNU перечислены различия между grep и egrep, которые, как представляется, лежат в синтаксисе: некоторые вещи требуют слэшей, а другие нет. Я думаю, что egrep более «совместим» с регулярными выражениями и регулярными выражениями javascript, поэтому мне легче использовать egrep.

    Btw. Я действительно рекомендую вам попробовать попробовать – он поддерживает PREG и имеет более полезные значения по умолчанию (например, раскраски, пропуски, вероятно, не-то, что вы хотите каталоги, такие как .svn, способность следовать символическим ссылкам, и это немного легче набрать ack, чем grep -E).

    Linux и Unix - лучшая ОС в мире.