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]

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

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

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

В то время как справочная страница дает более подробное объяснение, мне кажется, что проще всего запомнить параметры как –A = после и –B = до:

# ifconfig | grep -A 4 inet
# ifconfig | grep -B 2 UP

5. Печатает количество строк вокруг совпадения

Опция –C команды grep аналогична, но вместо того, чтобы печатать строки, идущие до или после строки, она печатает строки в любом направлении:

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, предназначен для использования с файлами, сжатыми gzip. Он принимает те же параметры, что и grep, и используется таким же образом:

# zgrep -i error /var/log/syslog.2.gz

11. Соответствие регулярным выражениям в файлах

Команда egrep — еще одна производная от «Расширенное глобальное регулярное выражение». Он распознает дополнительные метасимволы выражений, такие как + ? | а также ().

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

# grep -E

12. Поиск фиксированной строки шаблона

fgrep ищет в файле или списке файлов фиксированную строку шаблона. Это то же самое, что и grep -F. Обычный способ использования fgrep — передать ему файл шаблонов:

# fgrep –f file_full_of_patterns.txt file_to_search.txt

Это всего лишь отправная точка с grep, но, как вы, вероятно, видите, она бесценна для множества целей. Помимо реализованных нами простых однострочных команд, для начала можно использовать grep для написания мощных заданий cron и надежных сценариев оболочки.

Поделитесь с друзьями

Добавить комментарий

0 комментариев
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x