Основные команды Linux: как работает grep

Скачать Основные команды Linux: как работает grep
Недавно искали:

Itnull

Команда форума
Администратор
Регистрация
22.05.13
Сообщения
25.569
Реакции
9.516
Веб-сайт
itnull.me
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #1
Grep (сокращение от “global regular expression print”) — команда Linux/UNIX, с помощью которой выполняется поиск строк и сопоставление текстовых файлов с регулярными выражениями. Она предустановлена в каждом дистрибутиве Linux. В этом гайде мы рассмотрим работу команды grep на нескольких примерах.


При помощи команды 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"

Например, давайте найдем строку “Linux” в нашем файле:

Код:
$ grep "Linux" welcome.txt

Получаем следующий вывод:
grep-text-example.png


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


Код:
$ grep "string" /path/to/file


Цветной вывод Grep​

Если вам нужен цветной вывод, вы можете получить его с помощью опции –color. Например:

Код:
$ grep --color "free and opensource" welcome.txt

Вывод будет следующим:
grep-color.png



Рекурсивный поиск строки во всех директориях​

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

Код:
$ grep -r "string-name" *

Давайте для примера найдем строку “linux” в текущем каталоге и всех его подкаталогах:

Код:
$ grep -r "linux" *

Вывод команды будет следующим:

grep-recursive.png



Отключение чувствительности к регистру​


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


Код:
$ grep "linux" file name


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


Код:
$ grep -i "linux" welcome.txt


Получим следующий вывод:
grep-ignore-case-sensitivity.png



Флаг -i обычно выводит строки независимо от регистра.


Подсчет повторяющихся строк​


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


Код:
$ grep -c "Linux" welcome.txt


Вывод будет следующим:
grep-count-number-of-lines.png



Инвертирование вывода​


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


Код:
set nu


Затем нажмите Enter, и вы получите вывод:
line-number-in-vim.png



Чтобы вывести строки, в которых нет строки “Linux”, выполните команду:


Код:
$ grep -v "Linux" welcome.txt


Получаем следующий вывод:
grep-invert-output.png



Как видите, grep вывел строки, не содержащие паттерн поиска.

Нумерация искомых строк​


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

Код:
$ grep -n "Linux" welcome.txt

Вывод будет следующим:
grep-line-number-where-string-appears.png



Точный поиск​


Флаг -w будет искать строку, которая точно совпадает с шаблоном:


Код:
$ grep -w "opensource" welcome.txt


Получаем следующий вывод:
grep-search-exact-matching-pattern.png



Однако, если вы попробуете выполнить команду:


Код:
$ grep -w "open" welcome.txt


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


Пайплайны и grep​


Команду grep можно использовать с другими командами, это делается посредством каналов (или пайплайнов). Например, если нужно узнать, установлен ли определенный пакет в системе Ubuntu, выполните команду:


Код:
$ dpkg -L | grep "package-name"


Чтобы узнать, установлен ли OpenSSH в системе, выполните команду dpkg -l в связке с grep, как показано ниже:


Код:
$ dpkg -L | grep -i "openssh"


Вы получите:
grep-package-name.png



Вывод строк до или после шаблона​


При помощи флагов -A или -B можно вывести конкретное количество строк, которые стоят до или идут после искомого шаблона. Флаг -A выводит строки, которые идут после строки поиска, -B — строки до. Например, выполним команду:


Код:
$ ifconfig | grep -A 4 ens3


Она выводит искомую строку плюс 4 строки текста после строки ens в команде ifconfig. Вывод будет следующим:
grep-lines-after-search-string.png



В приведенном ниже примере флаг -B выводит искомую строку плюс 3 строки перед строкой ether в команде ifconfig.


Код:
$ ifconfig | grep -B 4 ether


Получаем вывод:
grep-lines-before-search-string.png



grep и регулярные выражения (REGEX)​


Термин REGEX (REGular EXpression) — это последовательность символов, которая используется для сопоставления шаблона. Ниже приведены несколько примеров:


  • ^ — сопоставляет символы в начале строки
  • $ — сопоставляет символы в конце строки
  • “.” — ищет любой символ
  • [a-z] — сопоставляет любые символы от A до Z
  • [^ ..] — сопоставляет всё, кроме символов в скобках

Чтобы вывести строки, которые начинаются с определенного символа, выполните команду:

Код:
grep ^character file_name

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


Код:
$ grep ^d welcome.txt


Вывод будет следующим:
regex-beginning-of-line.png



Для вывода строк, которые заканчиваются буквой “x”, выполните:


Код:
$ grep x$ welcome.txt


Получаем вывод:
regex-end-of-line.png



Другие опции Grep​


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


Код:
$ grep --help


Команда вернет вам примерно следующее:
grep-help.png
 
Назад
Сверху Снизу