Команда Grep в Linux/UNIX

Что такое Grep

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

Команда Grep в Linux

Команду grep можно использовать для поиска регулярного выражения или строки в текстовом файле. Чтобы продемонстрировать это, давайте создадим текстовый файл welcome.txt и добавим некоторое содержимое, как показано ниже.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

Отлично! Теперь мы готовы выполнить несколько команд grep и изменить вывод, чтобы получить желаемые результаты. Чтобы найти строку в файле, выполните следующую команду Синтаксис

$ grep "string" file name

ИЛИ

$ filename grep "string"

Пример:

$ grep "Linux" welcome.txt

Вывод Как видите, команда grep не только выполнила поиск и сопоставление строки “Linux”, но также вывела строки, в которых эта строка появляется. Если файл находится в другом каталоге, убедитесь, что указали путь к файлу, как показано ниже

$ grep "string" /path/to/file

Окрашивание результатов Grep с использованием опции –color

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

$ grep --color "free and opensource" welcome.txt 

Вывод

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

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

$ grep -r "string-name" *

Например

$ grep -r "linux" *

Вывод

Игнорирование регистра символов

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

$ grep "linux" file name

Ничего из вывода, верно? Это потому, что команда grep не смогла найти и сопоставить строку “linux”, так как первая буква в нижнем регистре. Чтобы игнорировать регистр, используйте флаг -i и выполните следующую команду

$ grep -i "linux" welcome.txt

Вывод Потрясающе, не так ли? Флаг -i обычно используется для отображения строк независимо от их регистрозависимости.

Подсчитайте строки, в которых совпадают строки с помощью опции -c

Чтобы подсчитать общее количество строк, в которых встречается или находится строковый шаблон, выполните следующую команду

$ grep -c "Linux" welcome.txt

Вывод

Использование Grep для инвертирования вывода

Чтобы инвертировать вывод Grep, используйте флаг -v. Опция -v указывает grep напечатать все строки, которые не содержат или не соответствуют выражению. Опция -v говорит grep инвертировать вывод, что означает вместо печати соответствующих строк делать обратное и печатать все строки, которые не соответствуют выражению. Вернемся к нашему файлу, давайте отобразим номера строк, как показано. Нажмите ESC в редакторе Vim, введите полный двоеточие, а затем

 set nu

Нажмите Enter Вывод Теперь, чтобы отобразить строки, которые не содержат строку “Linux”, выполните

$ grep -v "Linux" welcome.txt

Вывод Как видите, grep отобразил строки, которые не содержат искомый шаблон.

Пронумеруйте строки, содержащие искомый шаблон с помощью опции -n

Чтобы пронумеровать строки, где соответствует строковый шаблон, используйте опцию -n как показано

$ grep -n "Linux" welcome.txt

Вывод

Поиск точного соответствия слова с использованием опции -w

Передача затем флага -w будет осуществлять поиск строки, содержащей точно соответствующее слово, как показано

$ grep -w "opensource" welcome.txt

Выход Однако, если вы попытаетесь

$ grep -w "open" welcome.txt

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

Использование конвейеров с grep

Команда grep может использоваться вместе с конвейерами для получения отдельных результатов. Например, Если вы хотите узнать, установлен ли определенный пакет в системе Ubuntu, выполните

$ dpkg -L | grep "package-name"

Например, чтобы узнать, установлен ли OpenSSH в вашей системе, направьте команду dpkg -l в grep, как показано

$ dpkg -L | grep -i "openssh"

Выход

Отображение количества строк перед или после шаблона поиска с использованием вертикальных черт

Вы можете использовать параметры -A или -B для отображения количества строк, которые идут перед или после строки поиска. Флаг -A обозначает строки, идущие после строки поиска, а -B выводит результат, который появляется перед строкой поиска. Например

$ ifconfig | grep -A 4 ens3

Эта команда отображает строку, содержащую строку плюс 4 строки текста после строки ens в команде ifconfig. Вывод Напротив, в приведенном ниже примере использование флага -B отобразит строку, содержащую строку поиска плюс 3 строки текста перед строкой ether в команде ifconfig. Вывод

$ ifconfig | grep -B 4 ether

Использование grep с REGEX – регулярные выражения

Термин REGEX является аббревиатурой для REGулярное EXпрессия. REGEX – это последовательность символов, которая используется для сопоставления шаблона. Ниже приведены несколько примеров:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

Пример Чтобы напечатать строки, начинающиеся с определенного символа, синтаксис следующий;

grep ^character file_name

Например, чтобы отобразить строки, начинающиеся с буквы “d” в нашем файле welcome.txt, мы выполнили бы

$ grep ^d welcome.txt 

Вывод Чтобы отобразить строки, заканчивающиеся буквой ‘x’, выполните

$ grep x$ welcome.txt

Вывод

Получение помощи с дополнительными параметрами Grep

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

$ grep --help

Пример вывода Мы благодарим вас за время, потраченное на изучение этого учебного пособия. Не стесняйтесь пробовать команды и дайте нам знать, как это прошло.

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix