Поиск нескольких строк с помощью grep в Linux

Введение
Терминал Linux полон полезных команд, и одна из самых часто используемых — grep. Аббревиатура grep расшифровывается как Global Regular Expression Print — вывод совпадений, найденных по регулярным выражениям. Команда позволяет быстро находить строки, содержащие нужные последовательности символов, в одном или нескольких файлах.
Этот материал расскажет, как искать несколько строк одновременно, разберёт полезные опции и приведёт практические приёмы для повседневной работы.
Как вызвать терминал и указать путь к файлу
Обычно терминал открывают сочетанием клавиш Ctrl + Alt + T или через меню приложений. В терминале файлы указывают путём относительно домашней директории, где используется тильда ~ и слэши /.
Пример пути к файлу:
~/work/textdocument.txtЭта запись означает файл textdocument.txt в папке work внутри вашей домашней директории.
Основной приём: поиск нескольких строк
Чтобы найти строки, содержащие одно из нескольких слов, используйте расширенные регулярные выражения с ключом -E и разделитель | между словами. Пример — поиск слов bee и Vanessa в одном файле:
grep -E 'bee|Vanessa' ~/work/beescript.txtЭтот вызов вернёт все строки, в которых встречается bee или Vanessa.
Разбор команды
- grep — сама утилита.
- -E — включить расширенные регулярные выражения (ERE). Это позволяет использовать альтернацию | без экранирования.
- ‘bee|Vanessa’ — шаблон поиска в одинарных кавычках; вертикальная черта | означает «или».
- ~/work/beescript.txt — путь к файлу, где осуществляется поиск.
Поиск в нескольких файлах
Вы можете указать несколько файлов или маску:
grep -E 'bee|Vanessa' ~/work/beescript.txt ~/fun/mybeestory.txtИли рекурсивно по папке:
grep -R -E 'bee|Vanessa' ~/work/Пайплайн и сохранение результатов
Результаты удобно отправлять в постраничный просмотр или файл:
grep -E 'bee|Vanessa' ~/work/beescript.txt ~/fun/mybeestory.txt | lessless позволяет прокручивать вывод и искать внутри результатов (нажмите / и введите строку для поиска).
grep -E 'bee|Vanessa' ~/work/beescript.txt ~/fun/mybeestory.txt > beeresults.txtПеренаправление > сохраняет вывод в файл beeresults.txt для дальнейшего редактирования.
Полезные опции grep
- -i — нечувствительный к регистру поиск (case-insensitive).
- -w — полные слова (совпадение по слову целиком).
- -n — показывать номера строк в файле.
- -H — явно показывать имя файла в выводе (полезно при поиске в нескольких файлах).
- -r или -R — рекурсивный поиск в каталогах.
- -F — поиск фиксированных строк (без регулярных выражений), быстрее для простых слов.
- –color=auto — подсвечивать совпадения в выводе.
Примеры сочетаний:
grep -i -n -E 'bee|Vanessa' ~/work/beescript.txt
grep -R --color=auto -w -E 'error|failed|panic' /var/log/
grep -F -n 'literal phrase' notes.txtКогда grep с -E не подходит
Важно: регулярные выражения гибкие, но не всегда очевидны. Вот типичные случаи, когда стандартный подход может «не сработать»:
- Нужно искать большое количество фиксированных строк (сотни шаблонов) — тогда лучше использовать grep -F с файлом шаблонов (-f patterns.txt) или более быстрый инструмент, например ripgrep.
- Поиск по двоичным файлам — grep по умолчанию предназначен для текстов; используйте strings или специализированные инструменты.
- Сложные многострочные шаблоны — традиционный grep ищет по строкам; для многострочного поиска удобнее awk, perl или pcregrep.
Альтернативные инструменты
- ripgrep (rg) — очень быстрый рекурсивный поиск, поддерживает многие опции grep и удобен для больших проектов.
- ack — ориентирован на разработчиков, умеет игнорировать каталоги вроде .git автоматически.
- awk — для сложной фильтрации и преобразования строк.
- sed — для потокового редактирования и поиска с заменой.
Чит-шит: часто используемые шаблоны
- Ищем несколько слов, одно из которых с разным регистром:
grep -i -E 'error|warning|critical' /var/log/syslog- Ищем точные слова и показываем номера строк:
grep -n -w -E 'TODO|FIXME' -R ./project- Используем файл шаблонов (patterns.txt содержит список строк, по одной на строку):
grep -F -f patterns.txt *.logРоль‑ориентированные чек‑листы
Для разработчика:
- Использовать rg для быстрого поиска по репозиторию.
- Добавлять опции -n и –color=auto для удобства.
- Прятать бинарные файлы и node_modules через .gitignore или опции поиска.
Для системного администратора:
- Искать ключевые слова в логах: “error”, “failed”, “panic”.
- Использовать -R для рекурсивного поиска по /var/log/.
- Сохранять результаты для инцидент-анализа: перенаправление в файл.
Критерии приёмки
- Команда возвращает строки, содержащие хотя бы одно из указанных слов.
- При использовании -n каждая строка помечена номером.
- При поиске в нескольких файлах вывод включает имя файла и соответствующие строки.
- При перенаправлении в файл соответствующий файл создаётся и содержит ожидаемые совпадения.
Мини‑методология для повторяемого поиска
- Сформулируйте список ключевых слов.
- Решите, нужен ли регистрозависимый поиск (используйте -i при необходимости).
- Выберите режим: фиксированные строки (-F) или регулярные выражения (-E).
- Тестируйте на одном файле с опцией -n и –color=auto.
- Расширяйте на каталог (-R) и логируйте вывод в файл.
Краткий глоссарий
- grep — утилита для поиска строк по шаблону.
- -E — расширенные регулярные выражения.
- -F — фиксированные строки, быстрое сравнение.
- -R / -r — рекурсивный поиск в каталогах.
Когда стоит выбрать ripgrep вместо grep
Если у вас большой кодовый репозиторий и требуется очень быстрая индексация, ripgrep (rg) обычно быстрее и автоматически уважает .gitignore. Но grep остаётся универсальным и доступен на большинстве систем без установки.
Короткая инструкция для часто встречающейся задачи
Найти в проекте все упоминания TODO или FIXME, с подсветкой и номерами строк:
grep -R -n --color=auto -E 'TODO|FIXME' .Итог
grep — легковесный и мощный инструмент для поиска по тексту. Для поиска нескольких строк используйте -E с разделителем | или -F при работе с фиксированными строками. Освоив опции и пайплайны (less, перенаправление в файл), вы сможете быстро анализировать файлы и логи.
Важно: если вы работаете с очень большими объёмами данных или множеством шаблонов, рассмотрите ripgrep или использование grep -F -f patterns.txt.
Короткое резюме
- grep -E ‘a|b’ — искать одно из нескольких слов.
- grep -F — для точных подстрок и высокой скорости.
- Используйте –color=auto, -n и -R для удобства и полноты вывода.
Summary:
- Освойте базовый синтаксис, затем добавляйте опции.
- Тестируйте поиск на одном файле перед масштабированием.
- Рассмотрите альтернативы при работе с большими объёмами данных.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента