<< Предыдущий раздел | /\ Содержание | >> Следующий раздел
Часто возникает задача: надо найти, в каком файле встречается некое слово или фраза. Для этого служит команда "grep". Она ищет "образец" в указанных файлах (или в стандартном вводе, если файлы не указаны) и печатает все строки, на которых он встречается. Пример (найти строку "no"):
bobby:~% grep no * proverbs:Dead men tell no tales. bobby:~% _ |
Каждая строка предваряется именем файла, в котором она найдена, и двоеточием; если указан только один файл (или стандартный ввод), то этого не делается -- просто печатается найденная строка.
С ключом "-i" grep ищет, не различая маленькие/заглавные буквы:
bobby:~% grep no * errs:/bin/ls: file10: No such file or directory errs:/bin/ls: file11: No such file or directory proverbs:Dead men tell no tales. bobby:~% _ |
Вообще-то, образец поиска для grep -- это не просто строка, а так называемое "регулярное выражение", некоторые символы в котором приобретают специальное значение:
Поскольку большинство этих символов имеют специальное значение и для оболочки, то образец следует указывать в одинарных кавычках (прямых апострофах).
Пример (найти все символьные линки в директории /etc):
bobby:~% ls -l /etc | grep '^l' lrwxrwxrwx 1 root root 21 Dec 9 20:55 initrunlvl -> ../ var/run/initrunlvl lrwxrwxrwx 1 root root 38 Dec 9 21:04 localtime -> ../u sr/share/zoneinfo/Asia/Novosibirsk lrwxrwxrwx 1 root root 11 Dec 9 20:44 rmt -> ../sbin/rm t* bobby:~% _ |
Здесь используется то, что для символьных линков ls первым символом строки (тип файла) выводит букву "l".
Если результат grep слишком большой и не помещается на экран, то его можно "переправить" команде просмотра, например, less. Пример (показать список всех поддиректорий из директории /usr/lib):
bobby:~% ls -l /usr/lib | grep '^d' | less |
Вообще говоря, в конвейере может участвовать сколько угодно команд. Так, команда
bobby:~% ls -l /usr/doc | grep '^d' | grep 'lib' | less |
делает почти то же, что и в предыдущем примере, но отбирает только те директории, в имени которых есть "lib".
|
Команда grep -- одна из самых полезных и частоиспользуемых в Unix. Она столь же важна для нахождения файлов с нужным содержимым, как ls -- для нахождения файлов с нужным именем. Поэтому стоит хорошо освоить grep -- умелое владение ей позволяет сэкономить массу времени и сил. Кроме того, регулярные выражения широко используются во многих других программах. |
<< Предыдущий раздел | /\ Содержание | >> Следующий раздел