Инструменты пользователя

Инструменты сайта


grep

GNU grep

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

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

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

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

Параметры grep

$ 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

Использование: 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=ШАБЛОН       использовать ШАБЛОН для поиска
  -f, --file=ФАЙЛ           брать ШАБЛОН из ФАЙЛа
  -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/
  • Ищет во всех файлах каталога регулярное выражение
    egrep.bash
    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
загрузка...
grep.txt · Последние изменения: 2018/09/02 08:05 — darkfire