Команда 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"fgrepfgrep
Fixed grep – это команда, которая используется для поиска всей строки. Не распознает метасимволы как часть регулярного выражения, независимо от того, выводятся они на экран они или нет.
pgrep
утилита, которая выдает идентификаторы процессов, атрибуты которых соответствуют указанным в командной строке запросам. Вот так выглядит список исполняемых процессов
pgrep bash 1772 11003 20678Ключ –а выводит всю командную строку
pgrep -a bash 1772 -bash 11003 /bin/bash 20678 /bin/bash 23567 -bashzipgrep, 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 PDFsdgrep
Пользователи 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.possgrep
Команда предназначена для поиска в электронных таблицах, в том числе и 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 на наших курсах – это доступно и понятно!