Что такое 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