Команда grep. Примеры использования

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)

Ссылки

Документация по grep на русском.

Рубрики: Linux

Если есть вопросы, что-то в статье не понятно или нашли ошибку, напишите об этом в комментариях, все комментарии читаются и по возможности материал будет доработан.
Популярные статьи

Обзор программы WindTerm

В статье описаны основные возможности программы WindTerm.

Команда grep. Примеры использования

grep - удобная и быстрая команда, здесь приведены примеры как произвести рекурсивный поиск в каталоге, поиск среди запущенных процессов и другие.

Основные команды Linux

В статье приведены примеры команд для работы с пользователями и группами, файлами и каталогами.

Комментарии

Влад [01.11.2022]
Параметр --include очень помогает сузить поиск
Name [02.06.2023]
Очень удобная команда, парой находишь искомое в совершенно неожиданных местах)
Данный сайт использует файлы cookies. Продолжая просмотр сайта, вы соглашаетесь с использованием файлов cookies.
ОК