grep - утилита командной строки, которая выполняет поиск по фразе или регулярному выражению в текстовых файлах или в потоке вывода.
Список ключей для команды находится в конце статьи.
Пример 1: Фильтр запущенных процессов
$ ps ax | grep php
#Пример результата работы:
708 pts/0 R+ 0:00 grep php
2123 ? Ss 0:43 php /var/www/test.php
12632 ? S 0:09 /usr/bin/php5.6 /var/www/test2.php
12633 ? S 0:09 php /var/www/test3.php reload
ps ax
- выводит список запущенных процессов, с помощью команды grep можно отфильтровать этот список по названию процесса или названию команды запустивший этот процесс, в данном случаи это php.
Пример 2: Рекурсивный поиск в каталоге
grep -inr 'test' /need/path
#Пример результата работы:
/need/path/test.php:16: function test(a,b) {
/need/path/test2.php:3: test(2,4);
/need/path/test2.php:157: test($a,$b);
В данном случаи ищется слово test в директории /need/path, поиск регистранезависимый и рекрусивный. В результате указывается название файла в котором было найдено совпадение, номер строки и содержимое самой строки.
Пример 3: Анализ файла запросов к серверу (access.log)
grep -o '\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)\{1\}' access.mass-hosting.log | sort | uniq -c | sort
Данный пример выбирает все ip адресса из файла access.mass-hosting.log сортирует их, далее объединяет и выводит в порядке возростание сколько раз каждый из них встречается в файле.
Пример 4: Поиск среди файлов с определенным расширением
grep -inr --include="*.css" 'header' /need/path/
/need/path/css/main.css:22:#header
Происходит поиск слова header только среди файлов с расширением css, поиск регистранезависимый и рекрусивный. В результате указывается название файла в котором было найдено совпадение, номер строки и содержимое самой строки.
Примеры поиска среди файлов с другими расширениями:
grep -inr --include="*.php" 'header' /need/path/
grep -inr --include="*.js" 'header' /need/path/
Пример 5: Исключить директорию из поиска
grep -inr --exclude-dir=/need/path/exclude 'test' /need/path
В данном примере происходит поиск заданного текста в директории /need/path, но при этом директория /need/path/exclude исключена из поиска.
На самом деле в работе часто возникает подобная ситуация, когда нужно произвести поиск по файлам, но при этом исключить папку какую-то папку, например с кешем или логами.
Ключи команды grep
Ключ | Значение |
---|---|
-V |
Выводи реверсивные результаты. Вместо того чтобы вывести строки где искомое было найдено — выводи те строки где искомой подстроки нет. |
-C |
Отключает стандартный способ вывода результата и вместо этого отображает только число обозначающее количество найденых строк. |
-i |
Делает поиск регистронезависимым |
-n |
Выдает перед каждой строкой ее номер в файле (строки нумеруются с 1). |
-w |
Ведет поиск по цельным словам. Например при обычном поиске строки ‘wood’ grep может найти слово ‘hollywood’. А если используется данный ключ то будут найдены только строки где есть слово ‘wood’. |
-l |
Выводит только имена файлов где была найдена строка. |
-r |
Производит поиск рекурсивно по всем поддиректориям. |
-o |
Печатает только часть строки подходящую под условие регулярного выражения. |
--include= |
Позволяет указать, что поиск нужно производить только среди файлов с определенным расширением (см. Пример 4). |
--exclude-dir= |
Исключает указанную директорию из поиска (см. Пример 5) |