[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"/ru/kb/how-to/vps/komanda-grep-v-linuxKbData":3},{"page":4,"pages":110,"recommendedPages":111,"category":69,"categoryTree":69,"total":15,"currentOrder":139,"activeManualCategoryId":69,"tag":-1},{"route":5,"uuid":8,"title":9,"excerpt":10,"content":11,"view_count":12,"published_at":13,"modified_at":13,"like":14,"category":17,"hero_image":62,"seo_metadata":63,"schema_org_metadata":67,"open_graph_metadata":70,"sections":71,"tags":101,"breadcrumbs":102,"images":109},{"language":6,"path":7},"ru","/kb/how-to/vps/komanda-grep-v-linux","17ffc3c8-122d-3ab8-7e81-15591c2b5338","Использование команды grep в Linux: как искать шаблоны, строки в файлах","Когда на сервере накапливаются гигабайты логов, десятки конфигурационных файлов и сотни строк вывода команд, найти нужную информацию вручную практически невозможно. Здесь на помощь приходит grep – одна из самых полезных утилит в Linux.","\n\u003Cp>Когда на сервере накапливаются гигабайты логов, десятки конфигурационных файлов и сотни строк вывода команд, найти нужную информацию вручную практически невозможно. Здесь на помощь приходит \u003Ccode>grep\u003C/code> – одна из самых полезных утилит в Linux. \u003Ccode>grep\u003C/code> позволяет за доли секунды найти строки, содержащие нужный текст или соответствующие заданному шаблону.\u003C/p>\n\n\n\n\u003Ch2 id=\"chto-takoe-grep\">Что такое grep\u003C/h2>\n\n\n\n\u003Cp>\u003Ccode>grep\u003C/code> – это консольная утилита для поиска строк по заданному образцу. Она просматривает текст построчно и выводит только те строки, которые соответствуют шаблону.\u003C/p>\n\n\n\n\u003Cp>Название часто расшифровывают как \u003Cstrong>g\u003C/strong>lobal \u003Cstrong>r\u003C/strong>egular \u003Cstrong>e\u003C/strong>xpression \u003Cstrong>p\u003C/strong>rint, но исторически оно произошло от команды редактора \u003Ccode>ed: g/re/p\u003C/code> (\u003Ccode>g\u003C/code> – globally, \u003Ccode>re\u003C/code> – regular expression, \u003Ccode>p\u003C/code> – print). Имя утилиты – это и есть та самая команда, вынесенная в отдельную программу.\u003C/p>\n\n\n\n\u003Cp>Утилита работает в трех основных режимах:\u003C/p>\n\n\n\n\u003Cul>\u003Cli>поиск в одном или нескольких файлах;\u003C/li>\u003Cli>поиск в потоке данных, который передается через конвейер (pipe) от другой команды;\u003C/li>\u003Cli>рекурсивный поиск по всем файлам внутри директории.\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Команда \u003Ccode>grep\u003C/code> входит в стандартный набор утилит любого дистрибутива Linux, поэтому устанавливать ее отдельно не нужно. Проверить наличие и версию можно так:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep --version\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch2 id=\"sintaksis-komandy-grep\">Синтаксис команды grep\u003C/h2>\n\n\n\n\u003Cp>Общая структура команды выглядит следующим образом:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep [опции] \"шаблон\" [файл...]\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Где:\u003C/p>\n\n\n\n\u003Cul>\u003Cli>\u003Ccode>опции\u003C/code> – необязательные флаги, которые меняют поведение поиска;\u003C/li>\u003Cli>\u003Ccode>шаблон\u003C/code> – строка или регулярное выражение, которое необходимо найти;\u003C/li>\u003Cli>\u003Ccode>файл\u003C/code> – один или несколько файлов, в которых выполняется поиск с помощью \u003Ccode>grep\u003C/code>.\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>\u003Ccode>Шаблон\u003C/code> рекомендуется заключать в кавычки. Это обязательно, если он содержит пробелы или специальные символы.\u003C/p>\n\n\n\n\u003Ch2 id=\"bazovye-primery-ispolzovaniya\">Базовые примеры использования\u003C/h2>\n\n\n\n\u003Cp>Самый простой случай – найти строки со словом \u003Ccode>error\u003C/code> в файле лога:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep \"error\" access.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>\u003Ccode>grep\u003C/code> выведет все строки, в которых встречается \u003Ccode>error\u003C/code>, подсвечивая совпадения (если включена цветная подсветка).\u003C/p>\n\n\n\n\u003Cp>С помощью \u003Ccode>grep\u003C/code> поиск можно вести сразу по нескольким файлам, перечислив их через пробел:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep \"error\" access.log error.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>В этом случае перед каждой найденной строкой \u003Ccode>grep\u003C/code> укажет имя файла, в котором она найдена.\u003C/p>\n\n\n\n\u003Cp>Часто \u003Ccode>grep\u003C/code> используют в связке с другими командами через конвейер. Например, чтобы отфильтровать вывод команды и оставить только строки с процессом \u003Ccode>nginx\u003C/code>:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>ps aux | grep nginx\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Здесь \u003Ccode>grep\u003C/code> получает данные не из файла, а из вывода предыдущей команды.\u003C/p>\n\n\n\n\u003Cp>В выводе \u003Ccode>ps aux | grep nginx\u003C/code> почти всегда оказывается лишняя строка – сам процесс \u003Ccode>grep nginx\u003C/code>, который в момент поиска тоже виден в списке процессов. Чтобы исключить его, применяют небольшую хитрость с символьным классом:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>ps aux | grep [n]ginx\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Шаблон \u003Ccode>[n]ginx\u003C/code> совпадает со строкой \u003Ccode>nginx\u003C/code>, но сама команда в списке процессов выглядит как \u003Ccode>grep [n]ginx\u003C/code> и под этот шаблон уже не подходит. Как альтернатива – специализированная утилита \u003Ccode>pgrep nginx\u003C/code>, которая ищет процессы по имени и этой проблемы лишена.\u003C/p>\n\n\n\n\u003Ch2 id=\"osnovnye-opcii-grep\">Основные опции grep\u003C/h2>\n\n\n\n\u003Cp>Возможности \u003Ccode>grep\u003C/code> раскрываются именно через \u003Ccode>опции\u003C/code>. Разберем те, что используются чаще всего:&nbsp;\u003C/p>\n\n\n\n\u003Cul>\u003Cli>игнорирование регистра: \u003Ccode>-i\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>По умолчанию \u003Ccode>grep\u003C/code> различает заглавные и строчные буквы. Флаг \u003Ccode>-i\u003C/code> отключает чувствительность к регистру, и тогда \u003Ccode>Error\u003C/code>, \u003Ccode>ERROR\u003C/code> и \u003Ccode>error\u003C/code> будут считаться совпадениями:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -i \"error\" access.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>инверсия поиска: \u003Ccode>-v\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Флаг \u003Ccode>-v \u003C/code>выводит строки, которые \u003Cstrong>не\u003C/strong> содержат шаблон. Удобно, когда нужно исключить лишнее. Например, показать все строки конфига, кроме пустых и закомментированных:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode> grep -vE \"^#|^$\" nginx.conf\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>номера строк: \u003Ccode>-n\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Опция \u003Ccode>-n\u003C/code> добавляет к каждой найденной строке ее номер в файле. Это упрощает дальнейшую работу с файлом:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -n \"server_name\" nginx.conf\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>строки контекста: \u003Ccode>-A\u003C/code>, \u003Ccode>-B\u003C/code>, \u003Ccode>-C\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>При разборе логов часто важна не только сама совпавшая строка, но и то, что происходило рядом с ней. Для этого есть три опции:\u003C/p>\n\n\n\n\u003Col>\u003Cli>\u003Ccode>-A N\u003C/code> (after) – показать \u003Ccode>N\u003C/code> строк после совпадения;\u003C/li>\u003Cli>\u003Ccode>-B N\u003C/code> (before) – показать \u003Ccode>N\u003C/code> строк до совпадения;\u003C/li>\u003Cli>\u003Ccode>-C N\u003C/code> (context) – показать \u003Ccode>N\u003C/code> строк до и после совпадения.\u003C/li>\u003C/ol>\n\n\n\n\u003Cp>Например, вывести строку с ошибкой и три следующие за ней строки – чтобы увидеть, что произошло после сбоя:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -A3 \"error\" app.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Показать совпадение вместе с двумя строками перед ним:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -B2 \"error\" app.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>А \u003Ccode>-C\u003C/code> покажет окружение с обеих сторон сразу:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -C3 \"error\" app.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Если в файле несколько совпадений, \u003Ccode>grep\u003C/code> отделяет их блоки строкой с \u003Ccode>--\u003C/code>.\u003C/p>\n\n\n\n\u003Cul>\u003Cli>подсчет совпадений: \u003Ccode>-c\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Если важно не содержимое, а количество строк с совпадением, используйте \u003Ccode>-c\u003C/code>:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -c \"404\" access.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Команда вернет только число строк, в которых встретился код \u003Ccode>404\u003C/code>.\u003C/p>\n\n\n\n\u003Cul>\u003Cli>вывод только совпавшей части: \u003Ccode>-o\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>По умолчанию \u003Ccode>grep\u003C/code> выводит строку целиком, даже если шаблон совпал лишь с ее частью. Флаг \u003Ccode>-o\u003C/code> оставляет в выводе только сам фрагмент, совпавший с шаблоном, а каждое совпадение печатается на отдельной строке. Это удобно, когда нужно извлечь конкретные данные, а не строки целиком – например, вытащить из лога все IP-адреса в начале строк:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -oE \"^[0-9.]+\" access.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>список файлов с совпадениями: \u003Ccode>-l\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Флаг \u003Ccode>-l\u003C/code> выводит не сами строки, а имена файлов, в которых есть хотя бы одно совпадение:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -l \"password\" *.php\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Это удобно, когда нужно понять, в каких файлах встречается определенный текст.\u003C/p>\n\n\n\n\u003Cul>\u003Cli>рекурсивный поиск: \u003Ccode>-r\u003C/code> и \u003Ccode>-R\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Опция \u003Ccode>-r\u003C/code> запускает поиск по всем файлам в указанной директории и во всех вложенных папках:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -r \"TODO\" /var/www/site/\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Разница между \u003Ccode>-r\u003C/code> и \u003Ccode>-R\u003C/code> касается обработки символических ссылок при рекурсивном обходе. Если \u003Ccode>grep\u003C/code> натыкается на symlink внутри подкаталогов, то \u003Ccode>-r\u003C/code> такие ссылки игнорирует, а \u003Ccode>-R\u003C/code> по ним переходит. При этом по ссылке, явно указанной в самой команде, перейдут оба варианта.\u003C/p>\n\n\n\n\u003Cul>\u003Cli>поиск целых слов: \u003Ccode>-w\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>По умолчанию команда Linux \u003Ccode>grep\u003C/code> находит шаблон даже как часть другого слова. Например, поиск \u003Ccode>cat\u003C/code> выдаст и \u003Ccode>category\u003C/code>, и \u003Ccode>concatenate\u003C/code>. Флаг \u003Ccode>-w\u003C/code> ограничивает поиск целыми словами:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -w \"cat\" file.txt\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>совпадение по всей строке: \u003Ccode>-x\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Если \u003Ccode>-w\u003C/code> ограничивает совпадение целым словом, то \u003Ccode>-x\u003C/code> требует, чтобы шаблону соответствовала вся строка целиком. Это удобно при точечной проверке конфигов или списков:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -x \"127.0.0.1 localhost\" /etc/hosts\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>поиск по нескольким шаблонам сразу: \u003Ccode>-e\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Когда нужно искать несколько разных строк за один проход, необязательно собирать сложное регулярное выражение. Можно перечислить шаблоны через флаг \u003Ccode>-e\u003C/code>:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -e \"404\" -e \"500\" access.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>поиск по фиксированной строке: \u003Ccode>-F\u003C/code>\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>По умолчанию \u003Ccode>grep\u003C/code> трактует шаблон как регулярное выражение, поэтому символы \u003Ccode>.\u003C/code>, \u003Ccode>*\u003C/code>, \u003Ccode>[\u003C/code>, \u003Ccode>$\u003C/code> и другие имеют специальное значение. Если же нужно найти строку буквально, со всеми спецсимволами как есть, используйте флаг \u003Ccode>-F\u003C/code> (fixed strings):\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -F \"192.168.0.1\" access.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Здесь точки будут восприняты как обычные точки, а не как «любой символ». Это избавляет от необходимости экранировать каждый спецсимвол и заметно ускоряет поиск на больших файлах. Раньше для этого существовала отдельная команда \u003Ccode>fgrep\u003C/code>, но сейчас она считается устаревшей – рекомендуется применять \u003Ccode>grep -F\u003C/code>.\u003C/p>\n\n\n\n\u003Ch2 id=\"regulyarnye-vyrazheniya-v-grep\">Регулярные выражения в grep\u003C/h2>\n\n\n\n\u003Cp>Регулярные выражения в \u003Ccode>grep\u003C/code> позволяют описывать не точный текст, а шаблон, которому должны соответствовать строки. \u003Ccode>grep\u003C/code> работает с тремя типами регулярных выражений.\u003C/p>\n\n\n\n\u003Ch3 id=\"bazovye-regulyarnye-vyrazheniya-bre\">Базовые регулярные выражения (BRE)\u003C/h3>\n\n\n\n\u003Cp>Это режим по умолчанию. Основные метасимволы:\u003C/p>\n\n\n\n\u003Cul>\u003Cli>\u003Ccode>^\u003C/code> – начало строки;\u003C/li>\u003Cli>\u003Ccode>$\u003C/code> – конец строки;\u003C/li>\u003Cli>\u003Ccode>.\u003C/code> – любой одиночный символ;\u003C/li>\u003Cli>\u003Ccode>*\u003C/code> – повторение предыдущего символа ноль или более раз;\u003C/li>\u003Cli>\u003Ccode>[...]\u003C/code> – любой символ из указанного набора.\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Несколько примеров:&nbsp;\u003C/p>\n\n\n\n\u003Cul>\u003Cli>Найти строки, начинающиеся со слова \u003Ccode>Error\u003C/code>:\u003C/li>\u003C/ul>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep \"^Error\" error.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>Найти строки, заканчивающиеся на \u003Ccode>;\u003C/code>:\u003C/li>\u003C/ul>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep \";$\" nginx.conf\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cul>\u003Cli>Найти пустые строки:\u003C/li>\u003C/ul>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep \"^$\" file.txt\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch3 id=\"rasshirennye-regulyarnye-vyrazheniya-ere\">Расширенные регулярные выражения (ERE)\u003C/h3>\n\n\n\n\u003Cp>В базовом режиме символы \u003Ccode>+\u003C/code>, \u003Ccode>?\u003C/code>, \u003Ccode>{}\u003C/code>, \u003Ccode>|\u003C/code> и \u003Ccode>()\u003C/code> нужно экранировать обратным слешем. Чтобы этого избежать, используйте флаг \u003Ccode>-E\u003C/code>. Он включает расширенный синтаксис. Раньше для этого существовала отдельная команда \u003Ccode>egrep\u003C/code>, но сейчас рекомендуется применять именно \u003Ccode>grep -E\u003C/code>.\u003C/p>\n\n\n\n\u003Cp>Дополнительные возможности ERE:\u003C/p>\n\n\n\n\u003Cul>\u003Cli>\u003Ccode>+\u003C/code> – повторение один или более раз;\u003C/li>\u003Cli>\u003Ccode>?\u003C/code> – ноль или одно повторение;\u003C/li>\u003Cli>\u003Ccode>{n,m}\u003C/code> – от \u003Ccode>n\u003C/code> до \u003Ccode>m\u003C/code> повторений;\u003C/li>\u003Cli>\u003Ccode>|\u003C/code> – логическое «или»;\u003C/li>\u003Cli>\u003Ccode>()\u003C/code> – группировка.\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Например, найти строки с кодами ошибок \u003Ccode>404\u003C/code> или \u003Ccode>500\u003C/code>:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -E \"404|500\" access.log\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Найти слова \u003Ccode>color\u003C/code> и \u003Ccode>colour\u003C/code> одновременно:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -E \"colou?r\" file.txt\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch3 id=\"perl-sovmestimye-regulyarnye-vyrazheniya-pcre\">Perl-совместимые регулярные выражения (PCRE)\u003C/h3>\n\n\n\n\u003Cp>Флаг \u003Ccode>-P\u003C/code> включает наиболее мощный синтаксис регулярных выражений, совместимый с языком Perl. Он поддерживает такие конструкции, как \u003Ccode>\\d\u003C/code> (цифра), \u003Ccode>\\w\u003C/code> (буква, цифра или подчеркивание), \u003Ccode>\\s\u003C/code> (пробельный символ), а также «ленивые» квантификаторы и опережающие проверки.\u003C/p>\n\n\n\n\u003Cp>Например, извлечь все email-адреса:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep -oP \"[\\w.-]+@[\\w.-]+\\.\\w+\" file.txt\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Стоит учитывать, что режим \u003Ccode>-P\u003C/code> поддерживается не во всех системах, так как он опирается на отдельную библиотеку PCRE.\u003C/p>\n\n\n\n\u003Ch2 id=\"obedinenie-grep-v-cepochki\">Объединение grep в цепочки\u003C/h2>\n\n\n\n\u003Cp>\u003Ccode>grep\u003C/code> можно вызывать несколько раз подряд, последовательно сужая результат. Это работает благодаря конвейеру: вывод одной команды \u003Ccode>grep\u003C/code> передается на вход следующей.\u003C/p>\n\n\n\n\u003Cp>Например, найти в логе строки с кодом \u003Ccode>404\u003C/code>, относящиеся к запросам изображений в формате PNG:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>grep \"404\" access.log | grep \"\\.png\"\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Сначала первый \u003Ccode>grep\u003C/code> отбирает строки с \u003Ccode>404\u003C/code>, а затем второй из них оставляет только те, что содержат \u003Ccode>.png\u003C/code>. Такой подход часто оказывается проще, чем составлять одно сложное регулярное выражение.\u003C/p>\n\n\n\n\u003Cp>Если возникнут вопросы о работе \u003Ca href=\"https://beget.com/ru/vps?utm_source=kb&amp;utm_medium=article&amp;utm_campaign=grep&amp;utm_content=site_vps\">VPS-серверов\u003C/a>, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел «\u003Ca href=\"https://cp.beget.com/support?utm_source=kb&amp;utm_medium=article&amp;utm_campaign=grep&amp;utm_content=cp_support\">Помощь и поддержка\u003C/a>»), а если вы захотите обсудить наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем \u003Ca href=\"https://t.me/beget_chat\">сообществе\u003C/a> в Telegram.\u003C/p>\n",6,"2026-07-03T17:16:44+03:00",{"count":15,"liked":16},0,false,{"route":18,"title":20,"tags":21,"breadcrumbs":54,"uuid":55,"parent_uuid":56,"default_page_path":26,"seo_metadata":57},{"language":6,"path":19},"/kb/how-to/vps","VPS",[22,27,31,35,39,43,47,51],{"id":23,"title":24,"seo_metadata":25},"apache","Apache",{"title":26,"description":26,"header":26,"keywords":26},"",{"id":28,"title":29,"seo_metadata":30},"lets-encrypt","Let's Encrypt",{"title":26,"description":26,"header":26,"keywords":26},{"id":32,"title":33,"seo_metadata":34},"nginx","Nginx",{"title":26,"description":26,"header":26,"keywords":26},{"id":36,"title":37,"seo_metadata":38},"perenos-sajta","Перенос сайта",{"title":26,"description":26,"header":26,"keywords":26},{"id":40,"title":41,"seo_metadata":42},"ssl","SSL",{"title":26,"description":26,"header":26,"keywords":26},{"id":44,"title":45,"seo_metadata":46},"terminal","Терминал",{"title":26,"description":26,"header":26,"keywords":26},{"id":48,"title":49,"seo_metadata":50},"vestacp","VestaCP",{"title":26,"description":26,"header":26,"keywords":26},{"id":52,"title":20,"seo_metadata":53},"vps",{"title":26,"description":26,"header":26,"keywords":26},[],"957abe7d-4a90-1475-bfb0-6439507ed391","fa9a1354-631a-4206-df34-291f0db8f42a",{"title":58,"description":59,"header":60,"keywords":61},"VPS. Полезные статьи – Beget","Полезные статьи о VPS на сайте Beget","VPS. Полезные статьи","vps, вопрос ответ",{"src":26,"text":26},{"title":64,"description":65,"keywords":66},"Команда grep в ОС Linux: поиск и вывод шаблонов","Рассказываем, для чего нужна команда grep в Linux и как использовать утилиту в работе с файлами и папками Ubuntu","инструмент поиска grep в операционной системе линукс, search globally for lines matching the regular expression and print them",{"faq":68,"how_to":69,"product":69},[],null,{},[72,76,79,82,85,88,92,95,98],{"level":73,"name":74,"anchor":75},1,"Что такое grep","chto-takoe-grep",{"level":73,"name":77,"anchor":78},"Синтаксис команды grep","sintaksis-komandy-grep",{"level":73,"name":80,"anchor":81},"Базовые примеры использования","bazovye-primery-ispolzovaniya",{"level":73,"name":83,"anchor":84},"Основные опции grep","osnovnye-opcii-grep",{"level":73,"name":86,"anchor":87},"Регулярные выражения в grep","regulyarnye-vyrazheniya-v-grep",{"level":89,"name":90,"anchor":91},2,"Базовые регулярные выражения (BRE)","bazovye-regulyarnye-vyrazheniya-bre",{"level":89,"name":93,"anchor":94},"Расширенные регулярные выражения (ERE)","rasshirennye-regulyarnye-vyrazheniya-ere",{"level":89,"name":96,"anchor":97},"Perl-совместимые регулярные выражения (PCRE)","perl-sovmestimye-regulyarnye-vyrazheniya-pcre",{"level":73,"name":99,"anchor":100},"Объединение grep в цепочки","obedinenie-grep-v-cepochki",[],[103,107],{"route":104,"title":106},{"language":6,"path":105},"/kb/how-to","Полезные статьи",{"route":108,"title":20},{"language":6,"path":19},[],[],[112,121,130],{"route":113,"uuid":115,"title":116,"excerpt":26,"content":26,"view_count":15,"published_at":26,"modified_at":26,"like":69,"category":69,"hero_image":69,"seo_metadata":69,"schema_org_metadata":69,"open_graph_metadata":69,"sections":117,"tags":118,"breadcrumbs":119,"images":120},{"language":6,"path":114},"/kb/how-to/vps/razvernut-forgejo-na-servere","619478da-abab-5d99-e8e7-0dd19fff03d9","Forgejo – установка и настройка форка проекта Gitea",[],[],[],[],{"route":122,"uuid":124,"title":125,"excerpt":26,"content":26,"view_count":15,"published_at":26,"modified_at":26,"like":69,"category":69,"hero_image":69,"seo_metadata":69,"schema_org_metadata":69,"open_graph_metadata":69,"sections":126,"tags":127,"breadcrumbs":128,"images":129},{"language":6,"path":123},"/kb/how-to/vps/raspredelenie-vypolneniya-zaprosov-vnutri-privatnoj-seti-vps-cherez-haproxy","25eb8505-0294-bdac-672b-2aa79e7b9c5d","Распределение выполнения запросов внутри приватной сети VPS через HAProxy",[],[],[],[],{"route":131,"uuid":133,"title":134,"excerpt":26,"content":26,"view_count":15,"published_at":26,"modified_at":26,"like":69,"category":69,"hero_image":69,"seo_metadata":69,"schema_org_metadata":69,"open_graph_metadata":69,"sections":135,"tags":136,"breadcrumbs":137,"images":138},{"language":6,"path":132},"/kb/how-to/vps/razvertyvanie-django-s-pomoshchyu-nginx-postgresql-i-gunicorn","be5461a6-c6dc-f8a8-7403-cd6d475de1fb","Развертывание Django на сервере с помощью Nginx, PostgreSQL и Gunicorn",[],[],[],[],"popularity-desc"]