Вы когда-нибудь сталкивались с задачей поиска конкретной строки или шаблона в файле, но не знали, с чего начать? Ну тогда вам на помощь приходит команда grep!
grep – это мощный поисковик шаблонов файлов, который поставляется в комплекте с каждым дистрибутивом Linux. Если по какой-то причине он не установлен в вашей системе, вы легко можете установить его через менеджер пакетов, как показано ниже.
$ sudo apt install grep [On Debian, Ubuntu and Mint] $ sudo yum install grep [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a sys-apps/grep [On Gentoo Linux] $ sudo apk add grep [On Alpine Linux] $ sudo pacman -S grep [On Arch Linux] $ sudo zypper install grep [On OpenSUSE]
I have found that the easiest way to get your feet wet with the grep command is to just dive right in and use some real-world examples.
1. Поиск и нахождение файлов в Linux
Допустим, вы только что установили свежую копию нового Ubuntu на своем компьютере и собираетесь попробовать свои силы в сценарном языке Python.
Вы искали в сети учебные материалы, но видите, что используются две разные версии Python, и вы не знаете, какая версия Python установлена на Ubuntu сборщиком, или установлены ли какие-либо модули.
Просто выполните следующую команду dpkg с использованием grep, как показано ниже:
dpkg -l | grep -i python

Сначала мы запустили dpkg –l
, который перечисляет установленные пакеты *.deb
на вашей системе. Затем мы направили этот вывод в grep -i python
, что просто означает “перейдите к grep и отфильтруйте и верните все, что содержит ‘python’ в нем.”
Опция -i
присутствует для игнорирования регистра, так как grep чувствителен к регистру. Использование опции -i
– это хорошая привычка, если, конечно, вы не пытаетесь сузить более конкретный поиск.
2. Поиск и фильтрация файлов в Linux
grep также может использоваться для поиска и фильтрации в отдельных файлах или нескольких файлах. Давайте рассмотрим этот сценарий:
У вас возникли некоторые проблемы с вашим веб-сервером Apache, и вы обратились к одному из множества потрясающих форумов в сети, попросив помощи.
Добрый человек, который отвечает вам, попросил вас разместить содержимое вашего файла /etc/apache2/apache2.conf. Не будет ли проще для вас, парня, помогающего вам, и всех, кто это читает, если вы сможете удалить все закомментированные строки? Ну, вы можете! Просто запустите это:
grep -v ^\# /etc/apache2/apache2.conf | grep .
Опция -v
говорит grep инвертировать свой вывод, что означает, что вместо печати совпадающих строк, делать обратное и печатать все строки, которые не соответствуют выражению, в данном случае закомментированные строки #
.
Обратите внимание, что мы также использовали grep .
в конце, чтобы скрыть вывод всех пустых строк. Таким образом, мы видим только настройки конфигурации в нашем терминале.

3. Найти все .mp3 файлы в Linux
grep может быть очень полезным для фильтрации из stdout. Например, предположим, что у вас есть целая папка с музыкальными файлами в различных форматах.
Вы хотите найти все файлы *.mp3
от артиста JayZ, но вы не хотите никаких ремиксованных треков. Использование команды find с несколькими grep каналами поможет решить эту проблему:
# find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”
В этом примере мы используем find, чтобы напечатать все файлы с расширением *.mp3
, направляем их на grep –i
, чтобы отфильтровать и напечатать все файлы с именем «JayZ», а затем еще один канал на grep –vi
, который отфильтровывает и не печатает все имена файлов с текстом (в любом регистре) «remix».
[ Вам также может понравиться: 35 практических примеров команды Linux Find ]
4. Отображение количества строк до или после строки поиска
Еще пара вариантов – это переключатели -A
и -B
, которые отображают совпавшую строку и количество строк до или после строки поиска.
В то время как страница руководства дает более подробное объяснение, я нахожу, что легче всего запомнить опции как -A
= after, и -B
= before:
ifconfig | grep -A 4 inet ifconfig | grep -B 2 UP

5. Печатает количество строк вокруг совпадения
Опция -C
у команды grep похожа, но вместо того, чтобы печатать строки, которые идут перед или после строки, она печатает строки в обоих направлениях:
# ifconfig | grep -C 2 lo TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 15314 bytes 1593769 (1.5 MB) RX errors 0 dropped 0 overruns 0 frame 0
6. Подсчет количества совпадений
Аналогично передаче строки grep в подсчет слов (команда wc) встроенная опция grep может сделать то же самое за вас:
# ifconfig | grep -c inet6
7. Поиск файлов по заданной строке в Linux
Опция –n
для grep очень полезна при отладке файлов во время ошибок компиляции. Она отображает номер строки в файле данной искомой строки:
# grep -n "main" setup.py
8. Рекурсивный поиск строки во всех каталогах
Если вы хотите найти строку в текущем каталоге вместе со всеми подкаталогами, вы можете указать опцию –r
для рекурсивного поиска:
# grep -r “function” *
9. Поиск всего шаблона
Передача опции -w
в grep ищет весь шаблон, который есть в строке. Например, используя:
# ifconfig | grep -w "RUNNING"
Будет напечатана строка, содержащая шаблон в кавычках. С другой стороны, если вы попробуете:
# ifconfig | grep -w "RUN"

Ничего не будет возвращено, так как мы не ищем шаблон, а целое слово.
10. Поиск строки в сжатых файлах
Заслуживают упоминания производные утилиты от grep. Первая из них – zgrep, которая, подобно zcat, предназначена для использования с сжатыми файлами. Она принимает те же параметры, что и grep, и используется таким же образом:
# zgrep -i error /var/log/syslog.2.gz

11. Сопоставление регулярных выражений в файлах
Команда egrep – еще одна производная, которая расшифровывается как “Расширенное глобальное регулярное выражение”. Она распознает дополнительные метасимволы выражений, такие как at + ? |
и ()
.
Команда egrep очень полезна для поиска исходных файлов и других частей кода, если такая необходимость возникнет. Ее можно вызвать из обычного grep, указав параметр -E
.
grep -E
12. Поиск строки с фиксированным шаблоном
Команда fgrep ищет файл или список файлов для фиксированного шаблонного выражения. Это то же самое, что и grep -F
. Обычный способ использования fgrep – передача ему файла с шаблонами:
fgrep –f file_full_of_patterns.txt file_to_search.txt
Это всего лишь отправная точка с grep, но, как вы, вероятно, можете видеть, это бесценно для различных целей. Помимо простых однострочных команд, которые мы реализовали, grep можно использовать для написания мощных заданий cron и надежных сценариев оболочки shell scripts, чтобы начать.
Будьте креативны, экспериментируйте с опциями на странице руководства man page и придумывайте выражения grep, которые служат вашим собственным целям!
Source:
https://www.tecmint.com/12-practical-examples-of-linux-grep-command/