Использование grep, egrep

grep расшифровывается как ‘global regular expression printer‘. grep отрезает нужные вам строки из текстовых файлов которые содержат указанный пользователем текст.

Утилиты grep — это семейство, которое включает в себя grep, egrep и fgrep для поиска. В большинстве случаев вам нужно использовать fgrep, поскольку он самый быстрый и просматривает только строки и слова. Однако набрать grep легко. Из-за его различных функциональных возможностей инструмент grep имеет множество вариантов, включая egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (рекурсивный GREP) и т.д. Но эти варианты имеют незначительные отличия от оригинального grep.

grep может быть использован двумя путями — сам по себе или в комбинации с потоками.

grep очень обширен в функциональности, за счет большого количества поддерживаемых им опций, таких как: поиск с использованием строкового шаблона или RegExp регулярных выражений шаблон или perl based регулярных выражений и т.д.

$ grep -V
grep (GNU grep) 2.10
Copyright (C) 2011 Free Software Foundation, Inc.
Лицензия GPLv3+

Существуют модификации утилиты grep: egrep (с обработкой расширенных регулярных выражений), fgrep (трактующая символы $*[]^|()\ как литералы, т.е. буквально), rgrep (с включённым рекурсивным поиском).

  • egrep то же самое что grep -E
  • fgrep то же самое что grep -F
  • rgrep то же самое что grep -r
  • grep [-b] [-c] [-i] [-l] [-n] [-s] [-v] ограниченное_регулярное_выражение_BRE [файл …]

Команда grep сопоставляет строки исходных файлов с шаблоном, заданным ограниченным_регулярным_выражением. Если файлы не указаны, используется стандартный ввод. Обычно каждая успешно сопоставленная строка копируется на стандартный вывод; если исходных файлов несколько, перед найденной строкой выдается имя файла. В grep используется компактный недетерминированный алгоритм. В качестве шаблонов воспринимаются ограниченные регулярные выражения (выражения, имеющие своими значениями цепочки символов, и использующие ограниченный набор алфавитно-цифровых и специальных символов). Они имеют тот же смысл, что и регулярные выражения в ed.

Для экранирования символов $, *, [ ], ^, |, ( ), и \ от интерпретации shell'ом проще всего заключать ограниченное_регулярное_выражение в одинарные кавычки.

Опции:

-b	 Предваряет каждую строку номером блока, в котором она была найдена. Это может пригодиться при поиске блоков по контексту (блоки нумеруются с 0).
-c	 Выдает только количество строк, содержащих образец.
-h	 Предотвращает выдачу имени файла, содержащего сопоставившуюся строку, перед собственно строкой. Используется при поиске по нескольким файлам.
-i	 Игнорирует регистр символов при сравнениях.
-l	 Выдает только имена файлов, содержащих сопоставившиеся строки, по одному в строке. Если образец найден в нескольких строках файла, имя файла не повторяется.
-n	 Выдает перед каждой строкой ее номер в файле (строки нумеруются с 1).
-s	 Подавляет выдачу сообщений о не существующих или недоступных для чтения файлах.
-v	 Выдает все строки, за исключением содержащих образец.
-w	 Ищет выражение как слово, как если бы оно было окружено метасимволами \< и \>.

grep --help

  • -f, –file=ФАЙЛ -брать ШАБЛОН из ФАЙЛа.

Использование: grep [ПАРАМЕТР]… ШАБЛОН [ФАЙЛ]… Поиск ШАБЛОНА в каждом ФАЙЛЕ или в стандартном вводе. По умолчанию, ШАБЛОН представляет собой простое регулярное выражение (BRE). Пример: grep -i 'hello world' menu.h main.c

Выбор типа регулярного выражения и его интерпретация:
  -E, --extended-regexp     ШАБЛОН - расширенное регулярное выражение (ERE)
  -F, --fixed-regexp        ШАБЛОН - строки фиксированной длины, разделённые
                            символом новой строки
  -G, --basic-regexp        ШАБЛОН - простое регулярное выражение (BRE)
  -P, --perl-regexp         ШАБЛОН - регулярное выражения языка Perl
  -e, --regexp=ШАБЛОН       использовать ШАБЛОН для поиска
  -i, --ignore-case         игнорировать различие регистра
  -w, --word-regexp         ШАБЛОН должен подходить ко всем словам
  -x, --line-regexp         ШАБЛОН должен подходить ко всей строке
  -z, --null-data           строки разделяются байтом с нулевым значением, а не
                            символом конца строки

Разное:
  -s, --no-messages         подавлять сообщения об ошибках
  -v, --revert-match        выбирать не подходящие строки
  -V, --version             напечатать информацию о версии и выйти
      --help                показать эту справку и закончить работу
      --mmap                для обратной совместимости, игнорируется

Управление выводом:
  -m, --max-count=ЧИСЛО     остановиться после указанного ЧИСЛА совпадений
  -b, --byte-offset         печатать вместе с выходными строками смещение в
                            байтах
  -n, --line-number         печатать номер строки вместе с выходными строками
      --line-buffered       сбрасывать буфер после каждой строки
  -H, --with-filename       печатать имя файла для каждого совпадения
  -h, --no-filename         не начинать вывод с имени файла
      --label=МЕТКА         использовать МЕТКУ в качестве имени файла для
                            стандартного ввода
  -o, --only-matching       показывать только часть строки, совпадающей с ШАБЛОНОМ
  -q, --quiet, --silent     подавлять весь обычный вывод
      --binary-files=ТИП    считать, что двоичный файл имеет ТИП:
                            binary, text или without-match.
  -a, --text                то же что и --binary-files=text
  -I                        то же, что и --binary-files=without-match
  -d, --directories=ДЕЙСТВ  как обрабатывать каталоги
                            ДЕЙСТВИЕ может быть read (читать),
                            recurse (рекурсивно) или skip (пропускать).
  -D, --devices=ДЕЙСТВ      как обрабатывать устройства, FIFO и сокеты
                            ДЕЙСТВИЕ может быть read или skip
  -R, -r, --recursive       то же, что и --directories=recurse
      --include=Ф_ШАБЛОН    обработать только файлы, подпадающие под Ф_ШАБЛОН
      --exclude=Ф_ШАБЛОН    пропустить файлы и каталоги,
                            подпадающие под Ф_ШАБЛОН
      --exclude-from=ФАЙЛ   пропустить файлы, подпадающие под шаблон
                            файлов из ФАЙЛА
      --exclude-dir=ШАБЛОН  каталоги, подпадающие под ШАБЛОН,
                            будут пропущены
  -L, --files-without-match печатать только имена ФАЙЛОВ без совпадений
  -l, --files-with-matches  печатать только имена ФАЙЛОВ с совпадениями
  -c, --count               печатать только количество совпадающих
                            строк на ФАЙЛ
  -T, --initial-tab         выравнивать табуляцией (если нужно)
  -Z, --null                печатать байт 0 после имени ФАЙЛА

Управление контекстом:
  -B, --before-context=ЧИС  печатать ЧИСЛО строк предшествующего контекста
  -A, --after-context=ЧИС   печатать ЧИСЛО строк последующего контекста
  -C, --context[=ЧИС]       печатать ЧИСЛО строк контекста
  -ЧИСЛО                    то же, что и --context=ЧИСЛО
      --color[=КОГДА],
      --colour[=КОГДА]      использовать маркеры для различия совпадающих
                            строк; КОГДА может быть always (всегда),
                            never (никогда) или auto (автоматически)
  -U, --binary              не удалять символы CR в конце строки (MSDOS)
  -u, --unix-byte-offsets   выдавать смещение, как-будто нет CR-ов (MSDOS)

Вместо «egrep» предполагается запуск «grep -E». Вместо «fgrep» предполагается
«grep -F». Запуск под именами «egrep» или «fgrep» лучше не выполнять.
Когда не задан ФАЙЛ, или когда ФАЙЛ это -, то читается стандартный ввод.
Если указано меньше, чем два файла, то предполагает -h. При нахождении
совпадений кодом завершения программы будет 0, и 1, если нет.При возникновении
ошибок, или если не указан параметр -q, кодом завершения будет 2.

Об ошибках сообщайте по адресу <bug-grep@gnu.org>
Об ошибках в переводе сообщайте по адресу <gnu@mx.ru>
Домашняя страница GNU Grep: <http://www.gnu.org/software/grep/>
Справка по работе с программами GNU: <http://www.gnu.org/gethelp/>

(e)grep примеры

  • Рекурсивно ищет слово expat во всех файлах каталога home
$ grep -R expat /home/
  • Ищет во всех файлах каталога регулярное выражение
DIRMail="/home/vmail/cur"
 
/bin/egrep -h -e ' IP .*[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' \
 $DIRMail/* |  awk '{print $4}'
  • Чтобы вывести несколько строк до и после найденного вхождения, нужно использовать параметры grep -B и -A, например в файле созданном tshark
$ tail -f /root/tshark_401_Unauthorized.pcap | grep Unauthorized -B 1 -A 2
  • Еще один пример вывода переменных MySQL
mysql -e "SHOW VARIABLES LIKE '%'\G;" | grep innodb_buffer_pool_size  -B 1 -A 1
  • Например, нужно реализовать поиск вхождений в файле из списка слов в первом файле, получим такую строку:
grep -f /tmp/list /etc/asterisk/sip.conf
PQ VPS сервера в 28+ странах.