Find, locate, whereis и grep
Grep
Если команда find применяется для поиска файла по имени, типу или дате, то по команде grep происходит поиск заданной строки текста в нескольких файлах.
Предположим, у вас есть текстовый файл, содержащий слово "radio". Вы записали этот файл в исходный каталог, но забыли его имя. Следовательно, надо найти файл, который содержит слово "radio". Именно такой поиск выполняется по команде grep.
Если предположить, что в данный момент вы находитесь в исходном каталоге, процесс будет выглядеть следующим образом.
$ grep radio * ab.txt:This is a tes.t of searching for the word radio .pop.txt: On another radio station, he found that
Обратите внимание: команда grep выводит по одной строке на каждое найденное слово "radio". Справа от имени файла после двоеточия приведена строка, содержащая искомое слово. Общий формат команды grep следующий.
$ grep text-pattern file-list
В качестве строки поиска text-pattern можно указать слово, фразу или более сложное регулярное выражение. Регулярные выражения – мощное средство поиска текста. Их описание можно найти на странице руководства команды grep. Список файлов file-list может быть любой формы, допускаемой оболочкой. Типы выражений, составляющие список файлов, рассмотрены в гл. 16.
Обычно проверка одного файла проводится командой:
$ grep text-pattern file-name
…а проверка всех файлов некоторого каталога командой:
$ grep text-pattern *
В последней команде "*" – это выражение, означающее поиск во всех файлах текущего каталога. Строка поиска в простейшем варианте представляет собой слово или часть слова без пробелов. Если надо найти фразу, например "is a test", от ее указывают в двойных кавычках, как в следующем примере:
$ "grep "is a test"* ab.txt:This is a test of searching for the word radio.
Подобно командам more и less, команду grep удобно конвейеризировать с другими командами. Предположим, что нам необходимо получить список всех файлов в текущем каталоге с датой модификации 12 мая. Для этого можно воспользоваться командой 1s – | с присоединенной командой grep:
$ 1s – 1 | grep "May 12" -rw-r-r – 1 root root 19197 May 12 21:17 rfbprotoheader.pdf -rw-r-r – 1 root root 110778 May 12 21:20 rfprotoA.zip -rw-r-r – 1 root root 17692 May 12 23:03 svnc-0.1 .tar,gz -rw-r-r – l root root 25222 May 12 19:58 vnc-3. 3 .l_j-avasrc .tgz drwxr-xr-x 2 root root 1024 May 12 21:49 vncj.ava
Команды и кавычки
Существует три разновидности кавычек, используемых в командах: одиночная ('), двойная (") и обратная ('), Эти кавычки отличаются с точки зрения встроенных команд, наподобие date, и переменных, наподобие $LOGNAME. Пара любых одинаковых кавычек ограничивает передаваемую команде строку данных. Например, допустим, что $LOGNAME=mj и сравним следующие команды:
echo Welcome $LOGUAME, the date is date echo Welcome $LOGNAME, the date is date' echo "Welcome $LOGNAME, the date is date" echo "Welcome $LOGNAME, the date is 'date'"
В зависимости от того, насколько корректно указаны кавычки, Linux будет (или не будет) выполнять команду date или транслировать $LOGNAME. Результаты выглядят так:
Welcome mj, the date is date Welcome $LGGNAME, the date is /Sate Welcome mj, the date is date Welcome mj, the.date is Mon June 14 10:45:20 EDT 2001
Первый пример не содержит кавычек вообще. $LOGNAME транслируется как mj, но команда date не выполняется. Во втором примере использованы одиночные кавычки. $LOGNAME не транслируется, а команда date не выполняется. Третий пример содержит двойные кавычки. Результат совпадает с результатом первой команды, поэтому двойные кавычки полезны в таких командах как grep. Последний пример заключает date в обратные кавычки. Такая процедура позволяет выполнить команду Linux, входящую в состав текстовой строки.