grep - поиск в Linux, примеры

1. Немного про grep

Команда grep (global regular expression print) остается одной из наиболее универсальных команд в окружении командной строки Linux. Это происходит потому что grep является чрезвычайно мощной утилитой которая дает пользователям возможность сортировать ввод на основе сложных правил, тем самым делая ее популярным связующим звеном в конвейере команд. Grep в основном используется для поиска текста как в данных поступающих на стандартный вход, так и в указанных файлах на предмет строк содержащих указанные слова или подстроки.

2. Базовый синтаксис команды grep

Ниже представлены примеры использования grep с базовым синтаксисом:

grep 'word' filename
grep 'word' file1 file2 file3
grep 'string1 string2'  filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileName

3. Как использовать grep для поиска в файлах

Попробуем найти пользователя "vasya" в файле passwd. Для поиска в файле /etc/passwd информации о пользователе "vasya" необходимо использовать следующую команду:

grep vasya /etc/passwd

Пример результата:

vasya:x:1000:1000:vasya,,,:/home/vasya:/bin/bash

Также мы можем попросить grep осуществлять поиск игнорируя регистр букв, то есть не делая различия между большими и маленькими буквами. Для этого используется параметр -i, как показано ниже:

grep -i "vasya" /etc/passwd

4. Рекурсивное использование grep

Если у вас есть большое количество текстовых файлов в ряде директорий и поддиректорий, к примеру, конфигурационных файлов apache в /etc/apache2 и требуется найти файл где содержится определенный текст, то стоит использовать параметр -r чтобы осуществить рекурсивный поиск. То есть поиску будет осуществлен по всем файлам в иерархии директорий:

grep -r "domain.tld" /etc/apache2/

Также можно использовать этот параметр в верхнем регистре. То есть можно писать -R. Разница в том что при использовании -r не происходит обработка символических ссылок, а при использовании -R - происходит. Пример использования:

grep -R debian /etc/apache2/

/etc/apache2/sites-available/debian-help.ru: ServerName debian-help.ru /etc/apache2/sites-available/debian-help.ru: ServerAlias www.debian-help.ru

Как можно видеть результат состоит из имени файла, где была найдена строка и самой строки. Включение в вывод имен файлов можно с легкостью подавить с помощью параметра -h, как показано ниже:

grep -r -h debian /etc/apache2/

ServerName debian-help.ru ServerAlias www.debian-help.ru

5. Использование grep для поиска только целых слов

Когда вы ищите qwe, grep выберет все вхождения данного сочетания, к примеру, qwerty, qwe123, 345qwerty и множество других комбинаций. Вы можете указать, чтобы grep выбирал только те строки, которые содержат точное включение в виде целого слова. Для этого используйте параметр -w:

grep -w "qwe" filename

6. Как искать несколько различных слов

Для поиска двух или более различных слов вы можете использовать команду egrep следующим образом:

egrep -w 'first_word|second_word' filename

Либо вариант с просто grep:

grep -w 'first_word\|second_word' filename

7. Подсчет количества строк, содержащих вхождение

grep может сообщать сколько строк содержат указанное сочетание. Для этого воспользуйтесь параметром -c (count):

grep -c 'word' filename

В дополнение, можно использовать параметр -n чтобы заставить grep выводить номера строк в файле, в которых было найдено включение:

grep -n 'www-data' /etc/passwd

13:www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

8. Инвертный поиск

grep позволяет осуществлять поиск наоборот, то есть будут выведены все строки, кроме имеющих вхождение указанного слова и для этого используется параметр -v:

grep -v 'word' filename

Можно исключить что-либо из вывода поиска применив конвейер:

grep 'first_word' filename | grep -v 'second_word'

9. Как выводить только имена файлов в которых есть включение слова

Для вывода только имен файлов нужно использовать параметр -l, к примеру, так:

grep -l 'word' *.txt

10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях

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

grep -rli 'word' ./*

11. Вывод строк перед и после найденного вхождения

Для вывода нескольких строк перед вхождением используется параметры -A, а после вождения -B.

К примеру, чтобы вывести 5 строк перед и 10 после найденного вхождения используйте команду:

grep -A 5 -B 10 'word' filename
Сие опубликовал в день года в разделах grep, shell, translation

Наверх