Команда grep и ее большое семейство: характеристика+примеры

Grep (search globally for lines match the regular expression and print them – глобальный поиск и вывод строк, соответствующих регулярному выражению) является одной из самых популярных консольных утилит. Об этой команде не слышал разве что тот, кто вовсе незнаком с Linux-системами. Однако, о многочисленных “собратьях” grep знает далеко не каждый. В статье перечислим некоторые из них с характеристикой и примерами.

grep

Global Regular Expression Print – команда для поиска строк по заданному регулярному выражению. Может искать любой тип строки/команду в любом файле/списке файлов.

Синтаксис команды

grep ключ регулярное_выражение имя_файла

команда выполнит поиск по заданному шаблону в указанном файле.

Grep также позволяет фильтровать поток вывода данных. К примеру, мы хотим получить список только тех файлов, которые из пакета устанавливаются в каталог /usr/bin. На Debian команда будет выглядеть следующим образом

dpkg-query -L packagename | grep "/usr/bin"

Вот так команда будет выглядеть на rpm-based системах

rpm -q --filesbypkg packagename | grep "/usr/bin"fgrep

fgrep

Fixed grep – это команда, которая используется для поиска всей строки. Не распознает метасимволы как часть регулярного выражения, независимо от того, выводятся они на экран они или нет.

pgrep

утилита, которая выдает идентификаторы процессов, атрибуты которых соответствуют указанным в командной строке запросам. Вот так выглядит список исполняемых процессов

pgrep bash
1772
11003
20678

Ключ –а выводит всю командную строку

pgrep -a bash
1772 -bash
11003 /bin/bash
20678 /bin/bash
23567 -bash

zipgrep, zfgrep, bzfgrep, xzfgrep

Все эти команды предназначены для поиска ключевых слов/паттернов из архива.

zipgrep -i exception apptrace.zip
jboss.stderr:java.lang.NumberFormatException: For input string: "4718-4e99-bc84-828a7bf7f254" jboss.stderr: at java.lang.NumberFormatException.(NumberFormatException.java:65)

bzfgrep -w bugs 
/usr/share/doc/coreutils-8.25/README.bz2 that distribution and found and reported bugs. <http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/12292/focus=12318>. see <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/12015/>. Reporting bugs: subtle bugs. When reporting bugs, please include in the subject line both the package

Каждая утилита поддерживает расширенные регулярные выражения, а также имеют свой аналог egrep.

Fixed Strings Basic RegExps Extended RegExps
zfgrep zgrep zegrep
bzfgrep bzgrep bzegrep
xzfgrep xzgrep xzegrep

pdfgrep

Утилита предоставляется с одноименным пакетом. Регулярные выражения не поддерживаются.

eix pdfgrep
[I] app-text/pdfgrep
 Доступные версии: 1.3.2 1.4.1-r1 {+pcre test unac}
 Установленные версии: 1.4.1-r1(14:10:46 29.11.2016)(pcre -test -unac)
 Домашняя страница: http://pdfgrep.org/
 Описание: A tool similar to grep which searches text in PDFs

dgrep

Пользователи Debian наверняка знакомы с dgrep, который поставляется с пакетом debian goodies. Вызвать команду можно, как и обычный grep, только вместо файла прописываем название пакета.

Fixed Strings Basic RegExps Extended RegExps
dfgrep dgrep degrep
dzgrep

Верхние три команды находятся в текстовых файлах, dzgrep – в архивных.

msggrep

Утилита для поиска каталогов локализации. Идет в комплекте с пакетом gettext. Запускается с командной строки, выглядит примерно вот так

msggrep -K -e help
/usr/share/locale/ru/cups_ru.po

ssgrep

Команда предназначена для поиска в электронных таблицах, в том числе и Excel. Чтобы установить программу, нужно сначала скачать пакет Gnumeric. Расширенные регулярные выражения не поддерживает.

ngrep

Своеобразный гибрид tcpdump и grep, более приближенный к первому, чем ко второму. Позволяет наблюдать за сетевым трафиком по порту syslog и заданному ключевому слову.

ngrep -d any 'error'
port syslog

Наблюдать за сетевым трафиком по порту ftp и ключевым словам, не обращая внимание на регистр, сравнивать отдельные слова.

ngrep -wi -d any 'user|pass'
port 21

Выводить http трафик построчно

ngrep -W byline
port 80 interface: eth0 (64.90.164.72/255.255.255.252) filter: ip and ( port 80 ) #### T 67.169.59.38:42177 -> 64.90.164.74:80 [AP] GET / HTTP/1.1. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera ... Host: www.darkridge.com. Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9 ... Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1. Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0. Cookie: SQMSESSID=5272f9ae21c07eca4dfd75f9a3cda22e. Cookie2: $Version=1. Cache-Control: no-cache. Connection: Keep-Alive, TE. TE: deflate, gzip, chunked, identity, trailers.

deepgrep

Тяжелая артиллерия от KDE strigi-utils. Позволяет искать информацию в файлах формата tar, rpm, ar/deb, gzip/gz, bzip2/bz2, zip, прикрепленные файлы в емейле, а также файлы, вложенные друг в друга.

Grep является полезной консольной утилитой, а походные команды — отличными инструментами для поиска фактически любых документов в текстовом формате. Главное знать, для чего они служат и уметь применять их на практике. Изучайте Linux на наших курсах — это доступно и понятно!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *