Полное руководство по команде grep в Ubuntu

Введение

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

Базовый поиск строк и игнорирование регистра символов (-i)

Чтобы создать изолированное рабочее пространство для практики с командой grep и перейти в него, выполните команду mkdir -p ~/grep_demo && cd ~/grep_demo.

mkdir -p ~/grep_demo && cd ~/grep_demo

Чтобы создать текстовый файл с примерами строк для тестирования поиска, выполните команду echo -e 'Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux' > sample.txt.

echo -e ‘Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux’ > sample.txt

Команда grep выполняет поиск определенного шаблона или строки в файлах или тексте и выводит совпадающие строки.
По умолчанию регистр символов строго учитывается, поэтому будут найдены только строки с точным совпадением Ubuntu.
⚙️ [Основные опции]

-i : игнорирует регистр символов при поиске совпадений.
-v : инвертирует поиск, выводя только те строки, которые не содержат указанный шаблон.
-n : выводит номера строк вместе с найденным содержимым.
-c : выводит только общее количество совпавших строк.
-r : выполняет рекурсивный поиск по всем файлам во вложенных каталогах.
-l : выводит только имена файлов, содержащих совпадения.
-E : выполняет поиск с использованием расширенных регулярных выражений (ERE).

grep ‘Ubuntu’ sample.txt

При добавлении опции -i поиск выполняется без учета регистра символов.
В результате будут выведены как строки с Ubuntu, начинающиеся с заглавной буквы, так и строки с ubuntu со строчной буквы.

grep -i ‘ubuntu’ sample.txt

Отображение номеров строк (-n) и инвертированный поиск (-v)

Для создания тестовых данных логов, которые будут использоваться в практике анализа, выполните команду echo -e 'INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full' > app.log.

echo -e ‘INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full’ > app.log

Опция -n позволяет отображать номера строк, совпадающих с шаблоном поиска.
Вывод номеров строк вместе со строками, содержащими ERROR, позволяет быстро определить место возникновения проблемы.

grep -n ‘ERROR’ app.log

Опция -v инвертирует поиск и выводит только те строки, которые не соответствуют заданному шаблону.
Это позволяет исключить обычные строки с отметкой INFO и отобрать только записи, связанные с ошибками.

grep -v ‘INFO’ app.log

Рекурсивный поиск по подкаталогам (-r) и вывод только имен файлов (-l)

Для практики рекурсивного поиска создайте структуру вложенных каталогов для архива с помощью команды mkdir -p ~/grep_demo/logs/archive.

mkdir -p ~/grep_demo/logs/archive

Для проверки поиска создайте лог-файл ошибок базы данных с помощью команды echo 'database error' > ~/grep_demo/logs/db.log.

echo ‘database error’ > ~/grep_demo/logs/db.log

Для проверки стандартных записей создайте лог-файл кэша с помощью команды echo 'cache hit' > ~/grep_demo/logs/cache.log.

echo ‘cache hit’ > ~/grep_demo/logs/cache.log

Для тестирования навигации по вложенным каталогам создайте архивный файл старых ошибок с помощью команды echo 'fatal error occurred' > ~/grep_demo/logs/archive/old.log.

echo ‘fatal error occurred’ > ~/grep_demo/logs/archive/old.log

Совместное использование опций -r и -n позволяет выполнять рекурсивный поиск по подкаталогам с одновременным отображением номеров найденных строк.
В файлах, расположенных в каталоге logs и подкаталоге archive, будут выведены пути к файлам, номера строк и содержимое, содержащее строку error.

grep -rn ’error’ ~/grep_demo/logs

Если добавить опцию -l и выполнить команду в виде -rl, вместо содержимого строк будет выведен только список путей к файлам, содержащим данный шаблон.
Это удобно, когда среди множества файлов логов нужно быстро найти только те, в которых возникла error.

grep -rl ’error’ ~/grep_demo/logs

Просмотр окружающего контекста (-A, -B, -C) и цветовое выделение

Чтобы попрактиковаться в отслеживании пошагового выполнения процесса и контекста ошибок, создайте тестовый лог-файл с помощью команды echo -e 'Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit' > process.log.

echo -e ‘Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit’ > process.log

Опции -B и -A позволяют вывести указанное количество строк соответственно до (Before) и после (After) найденной строки.
Опция --color=always подсвечивает совпавшее словосочетание Critical Failure цветом, а вывод одной строки до и двух строк после позволяет понять ход выполнения операций до и после возникновения ошибки.

grep –color=always -B 1 -A 2 ‘Critical Failure’ process.log

Опция -C позволяет одновременно вывести одинаковое количество строк контекста (Context) как до, так и после совпадения.
Одновременное отображение одной строки непосредственно перед строкой с Critical Failure и одной строки сразу после нее делает анализ ключевого контекста еще более наглядным.

grep –color=always -C 1 ‘Critical Failure’ process.log

В этом материале мы разобрали ключевые аспекты работы с командой grep в Ubuntu — от базовых опций поиска до практического анализа системных логов.
Применяйте изученные шаблоны в повседневной работе с терминалом, чтобы значительно повысить свою продуктивность.