ГЛАВА 8
ГЛАВА 8
Семейство команд grep
Команда grep (global regular expression print — печать глобальных регулярных выражений) является наиболее известным инструментальным средством в UNIX и Linux. Она выполняет в текстовых файлах или стандартном входном потоке поиск выражений, соответствующих шаблону, с последующим отображением результата на экране. Команда grep может работать как с базовыми, так и с расширенными регулярными выражениями. Существует три разновидности этой команды:
• grep -cтандартный вариант, которому уделено основное внимание в данной главе.
• egrep -pаботает с расширенными регулярными выражениями (не поддерживает только оператор { }).
• fgrep — быстрый вариант команды grep. Вместо поиска выражений, соответствующих шаблону, выполняет поиск фиксированных строк из указанного списка. Пусть вас не вводит в заблуждение слово "быстрый". На самом деле это наиболее медленная из команд семейства grep.
Конечно, хотелось бы, чтобы существовала только одна, универсальная, команда
grep, и с этой ролью, в принципе, справляется GNU–версия grep. К сожалению,
нет единого способа задания аргументов для всех трех разновидностей команды grep,
к тому же скорость их работы заметно различается. В этой главе рассматриваются следующие темы:
• параметры команды grep;
• применение регулярных выражений в команде grep;
• особенности поиска алфавитно–цифровых символов.
В предыдущей главе указывалось, что в данной книге описываются только базовые регулярные выражения. Но мы все же рассмотрим несколько примеров употребления расширенных регулярных выражений во время знакомства с командой egrep. Основное же внимание будет уделено команде grep. Все применяемые в ней шаблоны могут без изменений использоваться и в команде egrep.
Прежде чем вы приступите к прочтению главы, создайте представленный ниже файл с именем data.f, содержащий информацию о заказах товаров. Структура записей этого файла такова:
1–й столбец — код города;
2–й столбец — код месяца, когда был сделан заказ;
3–й столбец — код заказа, включающий год, когда он был сделан;
4–й столбец — код товара;
5–й столбец — цена за единицу товара;
6–й столбец — код фирмы;
7–й столбец — количество заказанного товара.
$ cat : data .f
48 dec 3ВС1997 LPSX 68.00 LVX2A 138
483 sept 5AP1996 USP 65.00 LVX2C 189
47 oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
484 nov 7PL1996 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
216 sept 3ZL1998 USP 86.00 KVM9E 234
Разделителем полей является символ табуляции.