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