Шрифт:
grep [параметры] базовое_регулярное_выражение [файл]
В качестве регулярного выражения может быть указана обычная строка. Если не задан файл, текст берется из стандартного входного потока.
8.1.1. Употребление кавычек
Строку, которая задана в качестве регулярного выражения и состоит из нескольких слов, следует заключить в двойные кавычки. В противном случае первое слово строки будет воспринято как образец поиска, а все остальные слова будут считаться именами файлов. В итоге отобразится сообщение о том, что указанные файлы не найдены.
Если образец поиска состоит из какой-нибудь системной переменной, например $PATH, рекомендуется тоже взять ее в двойные кавычки. Это связано с тем, что, прежде чем передавать аргументы команде grep, интерпретатор shell выполняет подстановку переменных, и команда grep получает значение переменной, которое может содержать пробелы. В этом случае будет выдано то же сообщение об ошибке, о котором говорилось в предыдущем абзаце.
Шаблон поиска должен быть заключен в одинарные кавычки, если в состав регулярного выражения входят метасимволы.
8.1.2. Параметры команды grep
Ниже перечислены основные параметры команды grep:
– c
Задает отображение только числового значения, указывающего, сколько строк соответствуют шаблону
– i
Дает указание игнорировать регистр символов
– h
Подавляет вывод имен файлов, включающих найденные строки (по умолчанию в выводе команды grep каждой строке предшествует имя файла, в котором она содержится)
– 1
Задает отображение только имен файлов, содержащих найденные строки
– n
Задает нумерацию выводимых строк
– s
Подавляет вывод сообщений о несуществующих или нетекстовых файлах
– v
Задает отображение строк, не соответствующих шаблону
8.1.3. Поиск среди нескольких файлов
Если в текущем каталоге требуется найти последовательность символов "sort" во всех файлах с расширением doc, выполните такую команду:
$ grep sort *.doc
Следующая команда осуществляет поиск фразы "sort it" во всех файлах текущего каталога:
$ grep "sort it" *
8.1 4. Определение числа строк, в которых найдено совпадение
Опция -c позволяет узнать, сколько строк соответствуют заданному шаблону. Это может оказаться полезным в том случае, когда команда grep находит слишком много строк, и их лучше вывести в файл, а не на экран. Рассмотрим пример:
$ grep -с "48" data.f
4
Команда grep возвращает число 4. Это означает, что в файле data.f обнаружены 4 строки, содержащие последовательность символов "48". Следующая команда отображает эти строки:
$ grep "48" data.f
48 dec 3BC1997 LPSX 68.00 LVX2A 138
453 sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234
4 83 may 5PA1998 USP 37.00 KVM9D 644
8.1.5. Вывод номеров строк
С помощью опции -n выводимые строки можно пронумеровать. В результате вы сможете с легкостью устанавливать, в какой позиции файла находится требуемая строка. Например:
$ grep -n "48" data.f
1: :48 dec 3BC1997 LPSX 68.00 LVX2A 138
2: :483 sept. 5AP1996 USP 65.00 LVX2C 189
5: :484 nov 7PL1996 CAD 49.00 PLV2C 234
6: :483 may 5PA1998 USP 37.00 KVM9D 644
Номера строк отображаются в первом столбце.
8.1.6. Поиск строк, не соответствующих шаблону
Благодаря опции -v можно отобрать те строки, которые не соответствуют шаблону. Следующая команда извлекает из файла data.f строки, не содержащие последовательность символов "48":
$ grep -v "48" data.f
47 oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
8.1.7. Поиск символов на границе слов