TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 8.99K subscribers
Post #5674 2.89K
Используем grep для поиска в файлах и потоках

Любой Linux администратор сталкивался с командой grep, которая используется для поиска строк по шаблону в стандартных потоках и текстовых файлах.

Изначально grep был написан одним из основателей UNIX Кеном Томпсоном, когда его начальник Дуглас Макилрой попросил его написать инструмент «для поиска чего-нибудь в файлах». Название утилиты происходит от global regular expression print (глобальный вывод регулярных выражений)

Самый частый сценарий использования grep, когда нам нужно отфильтровать поток ввода-вывода, например:
dpkg -l | grep gimp


Также он может работать и с файлами, хотя многие используют совершенно излишнее:
cat file.txt | grep mystring


В то время, когда можно просто использовать:
grep mystring file.txt


Но бывает недостаточно просто найти искомое значение, часто бывает нужно получить также его контекст, это, например, важно при разборе логов, для этого используйте специальные ключи:

▫️A (after) – выводит указанное число сток после вхождения
▫️B (before) – выводит указанное число строк до вхождения
▫️С (context) – выводит указанное число строк до и после вхождения.

Например, если нам нужно вывести следующие пять строк после найденного вхождения используйте:
grep -A5 mystring file.txt


Если вам наоборот нужно сократить вывод и найти только вхождения, то используйте ключ -o, его удобно сочетать с ключом -n, который выводит номера строк.

Например:
grep -no mystring file.txt


Выдаст:
5:mystring
9:mystring
25:mystring


Также grep умеет искать по нескольким файлам сразу, в этом случае перед выводом искомой строки будет указано имя файла, если вам нужно вывести только имена файлов, в которых найдены вхождения используйте ключ -l:
grep -l mystring file.txt file1.txt file2.txt file3.txt


И наоборот, ключ -L позволяет вывести имена файлов в которых вхождение не найдено.

Для того, чтобы игнорировать регистр символов предназначен ключ -i, а ключ -v инвертирует шаблон запроса, так команда:
grep -v mystring file.txt


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

И, наконец, grep может использовать регулярные выражения, для этого укажите ключ -E, например, поиск российских телефонных номеров в файле:
grep -E ^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$ file.txt


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

В этом месте читатели могут вспомнить утилиту egrep, но в настоящий момент она, как и fgrep, объявлена устаревшей и лучше отвыкать от ее использования.

Несмотря на то, что указанные утилиты сохраняются практически во всех дистрибутивах для обеспечения обратной совместимости лучше сразу переходить на актуальные grep -E и grep -F.

Кстати, grep -F – это полная противоположность grep -E, данный ключ предписывает игнорировать метасимволы и подстановочные данные и будет искать строку как есть:

Например:
grep -F 2*(x+y)^2 file.txt


Будет искать строго то, что написано, это может понадобится при поиске специфической информации, скажем, математических выражений, как в этом примере.
  • 👍 24
  • ❤ 14
  • 🤮 1
More from @interface31
  1. Oct 2, 2026Post #6826
  2. Oct 1, 2026V2V миграция при помощи Vinchin Backup & Recovery Виртуализация сегодня – норма жизни, даж…
  3. Oct 1, 2026Post #6822
  4. Oct 1, 2026Проблема, как и статья не новая, но регулярно возникают вопросы. Не включается сетевое обн…
  5. Oct 1, 2026Post #6820
  6. Sep 30, 2026Влияние антивирусов на производительность 1С После выхода нашего материала: 🔹 Почему торм…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →