Меню Рубрики

Find grep linux примеры

Поиск текста в файлах Linux

Иногда может понадобится найти файл, в котором содержится определённая строка или найти строку в файле, где есть нужное слово. В Linux всё это делается с помощью одной очень простой, но в то же время мощной утилиты grep. С её помощью можно искать не только строки в файлах, но и фильтровать вывод команд, и много чего ещё.

В этой инструкции мы рассмотрим, как выполняется поиск текста в файлах Linux, подробно разберём возможные опции grep, а также приведём несколько примеров работы с этой утилитой.

Что такое grep?

Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Секрет популярности — её мощь, она даёт возможность пользователям сортировать и фильтровать текст на основе сложных правил.

Утилита grep решаем множество задач, в основном она используется для поиска строк, соответствующих строке в тексте или содержимому файлов. Также она может находить по шаблону или регулярным выражениям. Команда в считанные секунды найдёт файл в с нужной строчкой, текст в файле или отфильтрует из вывода только пару нужных строк. А теперь давайте рассмотрим, как ей пользоваться.

Синтаксис grep

Синтаксис команды выглядит следующим образом:

$ grep [опции] шаблон [имя файла. ]

$ команда | grep [опции] шаблон

  • Опции — это дополнительные параметры, с помощью которых указываются различные настройки поиска и вывода, например количество строк или режим инверсии.
  • Шаблон — это любая строка или регулярное выражение, по которому будет вестись поиск
  • Файл и команда — это то место, где будет вестись поиск. Как вы увидите дальше, grep позволяет искать в нескольких файлах и даже в каталоге, используя рекурсивный режим.

Возможность фильтровать стандартный вывод пригодится,например, когда нужно выбрать только ошибки из логов или найти PID процесса в многочисленном отчёте утилиты ps.

Опции

Давайте рассмотрим самые основные опции утилиты, которые помогут более эффективно выполнять поиск текста в файлах grep:

  • -b — показывать номер блока перед строкой;
  • -c — подсчитать количество вхождений шаблона;
  • -h — не выводить имя файла в результатах поиска внутри файлов Linux;
  • -i — не учитывать регистр;
  • — l — отобразить только имена файлов, в которых найден шаблон;
  • -n — показывать номер строки в файле;
  • -s — не показывать сообщения об ошибках;
  • -v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
  • -w — искать шаблон как слово, окружённое пробелами;
  • -e — использовать регулярные выражения при поиске;
  • -An — показать вхождение и n строк до него;
  • -Bn — показать вхождение и n строк после него;
  • -Cn — показать n строк до и после вхождения;

Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.

Примеры использования

С теорией покончено, теперь перейдём к практике. Рассмотрим несколько основных примеров поиска внутри файлов Linux с помощью grep, которые могут вам понадобиться в повседневной жизни.

Поиск текста в файлах

В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:

grep User /etc/passwd

В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:

А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:

grep -i «user» /etc/passwd

Вывести несколько строк

Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:

grep -A4 «EE» /var/log/xorg.0.log

Выведет строку с вхождением и 4 строчки после неё:

grep -B4 «EE» /var/log/xorg.0.log

Выведет целевую строку и 4 строчки до неё:

grep -C2 «EE» /var/log/xorg.0.log

Выведет по две строки с верху и снизу от вхождения.

Регулярные выражения в grep

Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:

Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:

grep «^Nov 10» messages.1

Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10

Поиск в конце строки — спецсимвол «$»:

grep «terminating.$» messages

Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.

Найдём все строки, которые содержат цифры:

grep «9» /var/log/Xorg.0.log

Вообще, регулярные выражения grep — это очень обширная тема, в этой статье я лишь показал несколько примеров. Как вы увидели, поиск текста в файлах grep становиться ещё эффективнее. Но на полное объяснение этой темы нужна целая статья, поэтому пока пропустим её и пойдем дальше.

Рекурсивное использование grep

Если вам нужно провести поиск текста в нескольких файлах, размещённых в одном каталоге или подкаталогах, например в файлах конфигурации Apache — /etc/apache2/, используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займётся поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:

grep -r «mydomain.com» /etc/apache2/

В выводе вы получите:

grep -r «zendsite» /etc/apache2/
/etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost
/etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite
/etc/apache2/vhosts.d/zendsite_vhost.conf:

Здесь перед найденной строкой указано имя файла, в котором она была найдена. Вывод имени файла легко отключить с помощью опции -h:

grep -h -r «zendsite» /etc/apache2/

ServerName zendsite.localhost
DocumentRoot /var/www/localhost/htdocs/zendsite

Поиск слов в grep

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:

grep -w «abc» имя_файла

Поиск двух слов

Можно искать по содержимому файла не одно слово, а два сразу:

egrep -w ‘word1|word2’ /path/to/file

Количество вхождений строки

Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):

grep -c ‘word’ /path/to/file

C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:

grep -n ‘root’ /etc/passwd

Инвертированный поиск в grep

Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:

grep -v пар /path/to/file

Вывод имени файла

Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:

Цветной вывод в grep

Также вы можете заставить программу выделять другим цветом вхождения в выводе:

grep —color root /etc/passwd

Выводы

Вот и всё. Мы рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Если у вас остались вопросы, пишите в комментариях!

Источник

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

Вы когда-нибудь сталкивались с задачей поиска определенной строки или шаблона в файле, но понятия не имели, с чего начать этот поиск? Ну тогда команда grep придет к вам на помощь!

Grep — мощный файловый поисковик, который поставляется на каждом дистрибутиве Linux. Если по какой-либо причине он не установлен в вашей системе, вы можете легко установить его через менеджер пакетов (apt-get на Debian/Ubuntu и yum на RHEL/CentOS/Fedora).

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

1. Поиск файлов

Предположим, что вы только что установили новую версию Ubuntu на ваш компьютер и что вы собираетесь добавить к Python некоторые скрипты. Вы проводите поиск в Интернете, и видите, что используются две разные версии Python, и вы не знаете, какой из них был установлен в вашей системе установщиком Ubuntu, и устанавливал ли он какие-либо дополнительные модули. Чтобы с этим разобраться, просто запустите эту команду:

Сначала мы запустили dpkg -l, чтобы вывести установленные *.deb пакеты в вашей системе. Далее мы передали этот вывод в grep -i python. Опция -i используется, чтобы игнорировать -case, поскольку grep чувствителен к регистру. Использование опции -i — хорошая привычка, если вы конечно, не пытаетесь выполнить более конкретный поиск.

2. Поиск и фильтрация файлов

Grep также может использоваться для поиска и фильтрации внутри одного или нескольких файлов. Давайте рассмотрим эту функцию:

У вас возникли проблемы с вашим веб-сервером Apache, и вы обратились к одному из многих форумов в сети с просьбой о помощи. Добрая душа, которая вам ответила, попросила вас опубликовать содержимое вашего файла /etc/apache2/sites-available/default-ssl. Разве вам не было бы не легче, если бы вы могли просто удалить все прокомментированные строки? А ведь вы это можете! Просто выполните эту команду:

Опция -v указывает grep инвертировать свой вывод, что означает, что вместо печати совпадающих строк grep сделает противоположное и выведутся строки, которые не соответствуют выражению, в этом случае — прокомментированные строки.

3. Найти все файлы .mp3

Grep может быть очень полезен для фильтрации из stdout. Например, предположим, что у вас есть целая папка, полная музыкальных файлов разных форматов. Вы хотите найти все файлы *.mp3 у исполнителя JayZ, но вы не хотите никаких ремикс-треков. Использование команды find с несколькими опциями grep запросто проделает этот трюк:

В этом примере мы используем find для вывода всех файлов с расширением *.mp3, связывая поиск с grep -i, чтобы отфильтровать и вывести все файлы с именем «JayZ», а затем еще одна опция для grep -vi, которая фильтрует и не выводит все имена файлов со строкой «remix».

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

Еще пара опций — это флажки -A и -B, которые отображают согласованные строки и количество строк, которые присутствуют до или после строки поиска. В то время как справочная страница дает более подробное объяснение, нам легче запомнить параметры как -A = after и -B = before:

5. Вывод количества строк совпадения

Параметр -C для grep вместо того, чтобы проверять строки, которые появляются до или после искомой строки, он проверяет строки в любом направлении:

6. Количество совпадений

Grep так же может запросто подсчитать количество совпадений:

7. Поиск файлов по заданным номерам строк

Параметр -n для grep очень полезен при отладке файлов во время компиляции. Он отображает номер строки в файле поиска:

8. Поиск рекурсивной строки во всех каталогах

Если вы хотите найти строку в текущем каталоге вместе со всеми подкаталогами, вы можете указать параметр -r для поиска рекурсивно:

9. Поиск по всему шаблону

Опции -w для grep ищет весь шаблон, который находится в строке. Например, используя:

Выведет строку, содержащую шаблон в кавычках. С другой стороны, если вы попытаетесь:

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

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

Gzip (сокращение от GNU Zip) — утилита сжатия и восстановления (декомпрессии) файлов, использующая алгоритм Deflate. Для поиска в таких файлах необходимо использовать команду zgrep, которая принимает те же параметры, что и grep, и используется таким же образом:

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

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

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

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

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

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

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

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Linphone для mac os
  • Link samsung mac os
  • Lineage 2 для mac os
  • Lineage 2 interlude mac os x
  • Lineage 2 classic на mac os