Поиск по сайту:

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


В системах Linux и Unix Grep, сокращение от «глобальная печать регулярных выражений», представляет собой команду, используемую для поиска и сопоставления текстовых файлов, содержащихся в регулярных выражениях. Кроме того, эта команда предустановлена в каждом дистрибутиве Linux. В этом руководстве мы рассмотрим использование команды Common 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 "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

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

$ grep -i "linux" welcome.txt

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

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

$ grep -c "Linux" welcome.txt

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

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

 set nu
$ grep -v "Linux" welcome.txt

Пронумеруйте строки, содержащие шаблон поиска, с опцией -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
$ ifconfig | grep -B 4 ether

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

Термин REGEX является аббревиатурой от REGular EXpression. 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 
$ grep x$ welcome.txt

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

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

$ grep --help