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

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

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

  • Если поведение пустого условия
  • Извлеките уникальную строку из каждой строки, содержащей <string>
  • Как я могу объединить один столбец вывода в список?
  • Почему regex '. +' Работает так, как ожидалось?
  • Стратегия для извлечения имени фильма из этого неравномерного набора данных?
  • выбор конкретной строки в поле
  • Как я могу использовать grep для нескольких шаблонов и печатать их в одной строке?
  • Что делает «grep -v» ^. $ "" Do
  • 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).

    Interesting Posts

    bash добавить свойство, используя переменную с jq

    xterm: #xxxxxx в преобразование цвета 0-255 – как?

    инструмент командной строки, чтобы зарезервировать высокий уровень кода в выходном файле?

    Использование системной даты / времени в скрипте Cron

    не удается найти окна после клонирования до hd с помощью команды dd

    Как транслировать две точки доступа?

    Почему в терминах Awesome появляются новые терминалы с SHLVL> 1?

    Зачем GDB нужен исполняемый файл, а также дамп ядра?

    Разделить файл на несколько небольших файлов, разделяемых символом новой строки

    Почему графический процессор nvidia-smi редко достигает 100%?

    Постоянная консоль на рабочем столе как «виджет»

    Идеи, как заставить мой аудиоинтерфейс usb работать с Linux?

    Плимут не загружается в Debian Jessie

    Двойное сиденье в Linux с 3D-ускорением и одной видеокартой

    Удалите строки текста, которые заканчиваются на "/"

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