grep — утилита поиска в системе

grep — утилита поиска в системе


#search

grep — утилита командной строки, которая находит на вводе строки, отвечающие заданному регулярному выражению, и выводит их, если вывод не отменён специальным ключом. Название представляет собой акроним английской фразы «search globally for lines matching the regular expression, and print them» — «искать везде строки, соответствующие регулярному выражению, и выводить их».

Как сказано в руководстве man (с точностью до перевода):

  • egrep — то же самое, что grep -E.

  • fgrep — то же самое, что grep -F.

  • rgrep — то же самое, что grep -r».


Grep это утилита командной строки Linux, который даёт пользователям возможность вести поиск строки. С его помощью можно даже искать конкретные слова в файле. Также можно передать вывод любой команды в grep, что сильно упрощает работу во время поиска и траблшутинга.

Возьмём команду ls. Сама по себе она выводит список всех файлов и папок.

Но если нужно найти конкретную папку или один файл среди сотни других, то мы можем передать вывод команды ls в grep через вертикальную черту (|), а уже grep-у параметром передать нужное слово.

  • $ ls | grep Documents

Если команда grep ничего не вернула, значит искомого файла/папки не существует в данной директории.

ПОИСК СТРОК

Если же нужно найти не одно слово, а словосочетание или целое предложение, то параметр команды grep должно быть выделено кавычками. Grep поддерживает как одинарные, так и двойные кавычки.

  • $ ls | grep ‘My Documents’

Несмотря на то, что команда grep чаще используется как своего рода фильтр для других команд, но её также можно использовать отдельно как на примере ниже.

  • $ grep ‘Class 1’ Students.txt

В этом примере мы вели поиск указанных в кавычках слов в файле Students.txt и команда grep успешно справилась со своей задачей.

ПОИСК ПО НЕСКОЛЬКИМ ПАРАМЕТРАМ

Команде grep можно передавать не один параметр, а несколько. Для этого перед каждым аргументом пишется ключ e. Эту команду система понимает, как “или-или” и выводит все вхождения указанных слов. Заметьте, что кавычками выделена только строка, которая содержит пробел.

  • $ grep -e ‘Class 1’ -e Todd Students.txt

РЕКУРСИВНЫЙ ПОИСК

Чтобы вести поиск по указанному шаблону среди всех файлов во всех папках и подпапках, команду grep нужно запустить с ключом r. Команда выведет все файлы, где найдено совпадение с указанным шаблоном, а также путь к ним. По умолчанию поиск ведется по текущей директории и поддиректориях.

  • $ grep -r pattern /directory/to/search

Пример:

  • $ grep -r tomato

  • Desktop/1.txt: tomato

  • Desktop/2.txt: tomato

ИГНОРИРОВАТЬ РЕГИСТР

По умолчанию, grep чувствительна к регистру, что немного мешает поиску, так как мы должны точно указать регистр букв при поиске. Эта проблема решается путем добавления ключа i к команде поиска.

  • $ grep -i string filename

ВЫВОД НОМЕРА СТРОКИ

Чтобы показать номер строки, где была найдена искомая строка, команду grep следует запускать с ключом n.

  • $ grep -n string filename

СОРТИРОВКА РЕЗУЛЬТАТА

Чтобы отсортировать вывод команды grep по какому-либо порядку, за ней следует прописать команду sort через вертикальную чёрточку (|). По умолчанию sort отсортирует результат по алфавиту.

  • $ grep tomato 1.txt | sort

  • tomato

  • xtomato

Поиск в архивах gzip

Утилита gzip (от англ. GNU Zip) — это популярный инструмент для сжатия данных без потерь в Linux, использующий алгоритм Deflate.

При этом с помощью команды zgrep можно вести поиск по сжатому архиву точно так же, как Вы это делали вне сжатого архива с помощью команды grep.

Следующая команда будет искать в архиве /var/log/syslog.2.gz строки, содержащие шаблон error с игнорированием регистра:

  • $ zgrep –i error /var/log/syslog.2.gz