Как использовать команду 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, которые послужат вашим собственным целям!