Поиск по сайту:

Как использовать команду Grep в Linux [12 полезных примеров]


Вы когда-нибудь сталкивались с задачей поиска определенной строки или шаблона в файле, но не знали, с чего начать поиск? Что ж, тогда на помощь придет команда 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]    

Я обнаружил, что самый простой способ освоить команду grep – это просто погрузиться в работу и использовать несколько реальных примеров.

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, который отфильтровывает и не печатает все имена файлов со строкой (в любом случае) «ремикс».

4. Отображение количества строк до или после строки поиска.

Еще пара опций — это переключатели -A и -B, которые отображают совпавшую строку и ряд строк, которые идут до или после строки поиска.

Хотя страница руководства дает более подробное объяснение, мне проще запомнить такие параметры, как -A=after и -B=< Strong>до:

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. Найдите строку в сжатых Gzip файлах.

Некоторого упоминания заслуживают производные от grep. Первый — это zgrep, который, как и zcat, предназначен для использования с gzip файлами. Он принимает те же параметры, что и 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 и надежных сценариев оболочки для начинать.

Будьте изобретательны, экспериментируйте с параметрами на справочной странице и придумывайте выражения grep, которые послужат вашим собственным целям!