12 практических примеров команды Linux Grep

Вы когда-нибудь сталкивались с задачей поиска конкретной строки или шаблона в файле, но не знали, с чего начать? Ну тогда вам на помощь приходит команда 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
Finding Files with Grep Command

Сначала мы запустили 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 . в конце, чтобы скрыть вывод всех пустых строк. Таким образом, мы видим только настройки конфигурации в нашем терминале.

Print Uncommented Lines in Linux

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
Print Number of Lines Before and After String

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"
Find Entire Pattern

Ничего не будет возвращено, так как мы не ищем шаблон, а целое слово.

10. Поиск строки в сжатых файлах

Заслуживают упоминания производные утилиты от grep. Первая из них – zgrep, которая, подобно zcat, предназначена для использования с сжатыми файлами. Она принимает те же параметры, что и grep, и используется таким же образом:

# zgrep -i error /var/log/syslog.2.gz
Search String in Gzipped Files

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/