Введение

Утилита командной строки Unix для поиска текста.

История

До того, как ему было дано название, grep был частной утилитой, написанной Кеном Томпсоном для поиска файлов по заданным образцам. Дуг Макилрой, не подозревая о её существовании, попросил Томпсона написать подобную программу. В ответ на просьбу подумать над такой утилитой за ночь, Томпсон на самом деле в течение часа исправлял ошибки и вносил улучшения в свою программу под названием s (сокращение от "search" – поиск). На следующий день он показал программу Макилрою, который сказал, что она полностью соответствует его требованиям. Рассказ Томпсона может объяснить распространенное мнение о том, что grep был написан за одну ночь. Первую версию Томпсон написал на ассемблере PDP-11, чтобы помочь Ли Э. Макмахону проанализировать текст "Федералистских записок" для определения авторства отдельных статей. Текстовый редактор ed (также разработанный Томпсоном) поддерживал регулярные выражения, но не мог использоваться для поиска в таком большом объеме текста, так как загружал весь файл в память для обеспечения произвольного доступа при редактировании. Поэтому Томпсон выделил код регулярных выражений в отдельный инструмент, который мог последовательно обрабатывать файлы произвольной длины, не загружая при этом слишком много данных в память. grep впервые вошел в состав Unix версии 4. Называя его "обычно цитируемым как эталонный программный инструмент", Макилрой приписывает grep "неизгладимое внедрение" философии инструментов Томпсона в Unix.

Реализация

Различные реализации grep доступны во многих операционных системах и средах разработки программного обеспечения. Ранние варианты включали egrep и fgrep, представленные в Unix версии 7. Вариант "egrep" поддерживает синтаксис расширенных регулярных выражений, добавленный Альфредом Ахо после первоначальной реализации регулярных выражений Кеном Томпсоном. Вариант "fgrep" ищет любое из списка фиксированных строк, используя алгоритм поиска подстрок Aho–Corasick. Бинарные файлы этих вариантов существуют в современных системах, обычно связанные с grep или вызывающие grep как скрипт оболочки с соответствующим флагом, например, `exec grep -E "$@"`. Хотя egrep и fgrep широко распространены в POSIX-системах, и спецификация POSIX упоминает об их широком использовании, они фактически не являются частью стандарта POSIX. Другие команды содержат слово "grep", чтобы указать, что это инструменты поиска, обычно основанные на сопоставлении с регулярными выражениями. Утилита pgrep, например, отображает процессы, имена которых соответствуют заданному регулярному выражению. В языке программирования Perl grep — это имя встроенной функции, которая находит элементы в списке, удовлетворяющие определенному условию. Эта функция высшего порядка обычно называется filter или where в других языках. Команда pcregrep — это реализация grep, использующая синтаксис регулярных выражений Perl. Аналогичную функциональность можно вызвать в GNU версии grep с флагом -P. Порты grep (например, в Cygwin и GnuWin32) также работают под Microsoft Windows. Некоторые версии Windows включают аналогичные команды qgrep или findstr. Команда grep также входит в состав ASCII MSX DOS2 Tools для MSX DOS версии 2. , , и команды также были портированы на операционную систему IBM i. Программное обеспечение Adobe InDesign имеет функции GREP (начиная с версии CS3 (2007)) на вкладке "GREP" в диалоговом окне "Найти/Заменить", а также в стилях абзаца "GREP styles", представленных в InDesign CS4.

Использование как глагола

В декабре 2003 года в онлайн-версию Оксфордского английского словаря были добавлены слова "grep" как существительное и как глагол. Распространенное употребление в качестве глагола – фраза "You can't grep dead trees" (нельзя искать в мертвых деревьях), означающая, что искать информацию в цифровых носителях, используя такие инструменты, как grep, гораздо проще, чем в бумажном виде (то есть в виде, полученном из "мертвых деревьев" – в данном контексте дисфемизм для бумаги).