схватить
Оригинальный автор(ы) | Кен Томпсон [1] [2] |
---|---|
Разработчик(и) | AT&T Bell Laboratories |
Первоначальный выпуск | ноябрь 1973 года [1] |
Написано в | С |
Операционная система | Unix , Unix-подобные , Plan 9 , Inferno , OS-9 , MSX-DOS , IBM i |
Платформа | Кросс-платформенный |
Тип | Команда |
grep
— это утилита командной строки для поиска в наборах данных открытого текста строк, соответствующих регулярному выражению . Его название происходит от ed команды g/re/p
( g lobal / выражениям по регулярным / поиск и печать ) , что имеет тот же эффект. [3] [4] grep
изначально был разработан для операционной системы Unix , но позже стал доступен для всех Unix-подобных систем и некоторых других, таких как OS-9 . [5]
История
[ редактировать ]До своего названия grep была частной утилитой, написанной Кеном Томпсоном для поиска в файлах определенных шаблонов. Дуг Макилрой , не подозревая о ее существовании, попросил Томпсона написать такую программу. Ответив, что он подумает о такой утилите за ночь, Томпсон фактически исправлял ошибки и около часа вносил улучшения в свою собственную программу под названием s
(сокращение от «поиск»). На следующий день он представил программу Макилрою, который сказал, что это именно то, что он хотел. Отчет Томпсона может объяснить мнение о том, что grep был написан в одночасье. [6]
Томпсон написал первую версию на PDP-11 языке ассемблера , чтобы помочь Ли Э. МакМэхону проанализировать текст «Записок федералиста» и определить авторство отдельных статей. [7] ( Текстовый редактор ed также автор Томпсон) имел поддержку регулярных выражений , но его нельзя было использовать для поиска в таком большом объеме текста, поскольку он загружал весь файл в память, чтобы обеспечить возможность с произвольным доступом редактирования , поэтому Томпсон извлек этот код регулярного выражения в автономный инструмент, который вместо этого будет обрабатывать файлы произвольной длины последовательно, не буферизуя слишком много в памяти. [1] Он выбрал это имя, потому что в ed команда g/re/p будет печатать все строки, соответствующие заданному шаблону. [8] [9] grep
впервые был включен в версию 4 Unix . Заявив, что его «обычно называют прототипом программного инструмента», Макилрой отметил, что grep
Томпсона с «безвозвратно укоренившейся» философией инструментов в Unix. [10]
Реализации
[ редактировать ]Разнообразие grep
реализации доступны во многих операционных системах и средах разработки программного обеспечения. [11] Ранние варианты включены egrep
и fgrep
, представленный в версии 7 Unix . [10] " egrep
Вариант поддерживает расширенный синтаксис регулярных выражений , добавленный Альфредом Ахо после Кена Томпсона . оригинальной реализации регулярных выражений [12] " fgrep
Вариант " ищет любую из списка фиксированных строк с использованием алгоритма сопоставления строк Ахо-Корасика . [13] Двоичные файлы этих вариантов существуют в современных системах и обычно связаны с grep
или вызов grep как сценария оболочки с добавленным соответствующим флагом, например exec grep -E "$@"
. egrep
и fgrep
, хотя они обычно используются в системах POSIX, но в спецификации POSIX упоминается их широкое распространение, на самом деле они не являются частью POSIX. [14]
Другие команды содержат слово «grep», обозначающее, что они являются инструментами поиска, обычно использующими совпадения с регулярными выражениями. pgrep
Утилита, например, отображает процессы, имена которых соответствуют заданному регулярному выражению. [15]
В Perl языке программирования grep — это имя встроенной функции, которая находит в списке элементы, удовлетворяющие определенному свойству. [16] Эту функцию высшего порядка обычно называют filter
или where
на других языках.
The pcregrep
команда представляет собой реализацию grep
который использует синтаксис регулярных выражений Perl . [17] Аналогичная функциональность может быть реализована в версии GNU. grep
с -P
флаг. [18]
Порты grep
( в Cygwin и GnuWin32 например, ) также работает под Microsoft Windows . Некоторые версии Windows имеют аналогичную qgrep
или findstr
команда. [19]
А grep
Команда также является частью ASCII инструментов MSX -DOS2 для MSX-DOS версии 2. [20]
The схватить , эгреп и Команды fgrep также были перенесены в операционную систему IBM i . [21]
Программное обеспечение Adobe InDesign имеет функции GREP (начиная с версии CS3 (2007 г.) [22] ), в поиска/изменения диалоговом окне [23] Вкладка «GREP», представленная в InDesign CS4. [24] в стилях абзаца [25] «Стили GREP».
схватить
[ редактировать ]grep (приблизительный grep) соответствует , даже если текст лишь приблизительно соответствует шаблону поиска. [26]
Следующий вызов находит сетевые маски в файле myfile , а также любое другое слово, которое может быть получено из него, при условии не более двух замен.
agrep -2 netmasks myfile
В этом примере создается список совпадений с ближайшими, то есть с наименьшим количеством замен, указанными первыми. Командный флаг B означает лучшее :
agrep -B netmasks myfile
Использование как глагол
[ редактировать ]В декабре 2003 года -словарь английского языка в Оксфордский онлайн слово «grep» было добавлено как существительное и глагол. [27]
Распространенным глаголом является фраза «Вы не можете найти мертвые деревья», означающая, что можно легче искать в цифровых медиа, используя такие инструменты, как grep
, чем можно было бы сделать с печатной копией (т.е. сделанной из «мертвых деревьев», что в данном контексте является дисфемизмом для бумаги). [28]
См. также
[ редактировать ]- Алгоритм поиска строк Бойера – Мура
- agrep , команда приблизительного сопоставления строк
- find (Windows) или Findstr — команда DOS и Windows, выполняющая текстовый поиск, аналогичный простой
grep
- find (Unix) — команда Unix, которая находит файлы по атрибуту, сильно отличающаяся от
grep
- Список команд Unix
- vgrep или «визуальный
grep
" - ngrep , сетевой grep
Ссылки
[ редактировать ]- ^ Jump up to: а б с Керниган, Брайан (1984). Среда программирования Unix . Прентис Холл. стр. 102 . ISBN 0-13-937681-Х .
- ^ «Долгое время команда grep была моей частной командой, прежде чем я обнародовал ее». -Кен Томпсон. Архивировано 26 мая 2015 г. в Wayback Machine , Бенджамин Руальтанзаува, опубликовано 5 февраля 2014 г., Medium.
- ^ Хаубен и др. 1997, гл. 9.
- ^ Рэймонд, Эрик . "греп" . Файл жаргона . Архивировано из оригинала 17 июня 2006 г. Проверено 29 июня 2006 г.
- ^ Пол С. Даян (1992). OS-9 Guru-1: Факты . Галактика Индастриал Лимитед. ISBN 0-9519228-0-7 .
- ^ VCF East 2019 — Брайан Керниган берет интервью у Кена Томпсона (видео). Ютуб. 6 мая 2019 г. Архивировано из оригинала 11 декабря 2021 г. (35 минут)
- ^ Компьютерфил, Откуда взялся GREP , интервью с Брайаном Керниганом
- ^ "регулярные выражения" . perl.plover.com . Архивировано из оригинала 20 октября 2017 года . Проверено 24 апреля 2018 г.
- ^ «Как Grep получил свое имя» . robots. Thoughtbot.com . Архивировано из оригинала 9 августа 2017 года . Проверено 24 апреля 2018 г.
- ^ Jump up to: а б Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139. Архивировано (PDF) из оригинала 11 ноября 2017 г.
- ^ Абу-Ассале, Тони; Вэй Ай (март 2004 г.). Обзор инструментов глобальной печати регулярных выражений (GREP) (технический отчет). Университет Далхаузи.
- ^ Хьюм, Эндрю (1988). «Сказка о двух Грепах». Программное обеспечение: практика и опыт . 18 (11): 1063. doi : 10.1002/sp.4380181105 . S2CID 6395770 .
- ^ Меран, Жерар (12 сентября 1990 г.). Алгоритмы и сложность . Эльзевир Наука. п. 278. ИСБН 9780080933917 . Архивировано из оригинала 4 марта 2016 года . Проверено 12 декабря 2015 г.
- ^ "греп" . www.pubs.opengroup.org . Открытая группа. Архивировано из оригинала 28 ноября 2015 года . Проверено 12 декабря 2015 г.
- ^ "pgrep(1)" . www.linux.die.net . Архивировано из оригинала 22 декабря 2015 года . Проверено 12 декабря 2015 г.
- ^ "греп" . www.perldoc.perl.org . Архивировано из оригинала 7 декабря 2015 года . Проверено 12 декабря 2015 г.
- ^ «Справочная страница pcregrep» . www.pcre.org . Кембриджский университет. Архивировано из оригинала 23 декабря 2015 года . Проверено 12 декабря 2015 г.
- ^ "Грэп(1)" . www.linux.die.net . Архивировано из оригинала 10 декабря 2015 года . Проверено 12 декабря 2015 г.
- ^ Сполдинг, Джордж (2000). Администрирование Windows 2000 . Библиотека сетевого профессионала. Осборн/МакГроу-Хилл. стр. 634 . ISBN 978-0-07-882582-8 . Проверено 10 декабря 2010 г.
QGREP.EXE[:] Инструмент, аналогичный grep в UNIX. Этот инструмент можно использовать для поиска текстовой строки.
- ^ «Руководство пользователя инструментов MSX-DOS2 от ASCII Corporation» . Апрель 1993 года.
- ^ ИБМ . «Программирование Qshell в IBM System i версии 7.2» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
- ^ «Обзор: Adobe InDesign CS3 — CreativePro.com» . Creativepro.com . 20 апреля 2007 г. Архивировано из оригинала 5 января 2018 г. . Проверено 24 апреля 2018 г.
- ^ «Справка InDesign: найти/изменить» . Архивировано из оригинала 28 августа 2016 г. Проверено 12 августа 2016 г.
- ^ «InDesign: стили GREP (1) Установка текста в круглых скобках курсивом» . Архивировано из оригинала 24 сентября 2017 г. Проверено 5 января 2018 г.
- ^ «Справка InDesign: стили GREP» . Архивировано из оригинала 28 августа 2016 г. Проверено 12 августа 2016 г.
- ^ С. Ли Генри (июнь 1998 г.). «Правильный поиск». Эксперт Солнца . стр. 35–26.
- ^ «Список новых слов за декабрь 2003 г.» . Оксфордский словарь английского языка . Проверено 6 декабря 2021 г.
- ^ Файл жаргона , статья «Документация»
- Примечания
- Ален Маглуар (август 2000 г.). Grep: поиск шаблона . Iuniverse Inc. ISBN 0-595-10039-2 .
- Хьюм, Эндрю Грепские войны: Инициатива стратегического поиска. Питер Коллинсон, редактор, Труды конференции EUUG Spring 88 , страницы 237–245, Бантингфорд, Великобритания, 1988. Европейская группа пользователей UNIX.
- Майкл Хаубен ; и др. (апрель 1997 г.). Пользователи сети: об истории и влиянии Usenet и Интернета (перспективы) . Издательство компьютерного общества Wiley-IEEE. ISBN 978-0-8186-7706-9 .
Внешние ссылки
[ редактировать ]- Официальный сайт GNU Grep
- Руководство по GNU Grep
- Plan 9 , том 1 Руководство программиста –
- Inferno по общим командам Руководство –
- «Почему GNU grep работает быстро» — подробности реализации от автора GNU grep.
- Команда Grep – 25 практических примеров