7.7 Поиск в файле символьных цепочек с помощью программ семейства grep contents

Подраздел


7.7 Поиск в файле символьных цепочек с помощью программ семейства grep

Семейство программ grep позволяет вам находить в одном или в группе файлов все строки, которые содержат цепочки символов удовлетворяющих регулярному выражению или шаблону (подробнее смотрите раздел 4.5). Само имя grep означает Global Regular Expresion Print - печать регулярных выражений общего вида. Программы этого семейства можно использовать как фильтры, т.е. извлекать подходящие под регулярное выражение строки из стандартного ввода и посылать их на устройство стандартного вывода.

Семейство сосотоит из тр©х членов, которые различаются по скорости работы, а также по виду допустимых регулярных выражений.

  • Программа grep производит поиск символьных цепочек соответствующих представленному шаблону. Имеется три следующих варианта grep, выбираемых соответствующими параметрами:
    -G
    -basic-regexp
    Интерпретирует шаблон как базовое регулярное выражение. Этот режим используется по умолчанию.

    -E
    -extended-regexp
    Интерпретирует шаблон как расширенное регулярное выражение.

    -F
    -fixed-strings
    Интерпретирует шаблон как список фиксированных символьных цепочек раздел©нных символами NL. Если любая цепочка из списка встречена в файле, то данная строка выводится на устройство стандартного вывода.

  • Программа egrep весьма подобна, но не идентична программе grep -E.

  • Программа fgrep есть то же, что grep -F.

Все программы семейства grep воспринимают следующие параметры.

-num
Удовлетворяюшие строки будут напечатаны с num предшествующими строками и num последующими. В этом случае grep не будет печатать никакую строку более, чем один раз.

-A num
-after-context=num
Вывести на устройство стандартного вывода num строк после найденной.

-B num
-before-context=num
Вывести на устройство стандартного вывода num строк перед найденной строкой.

-C
-context
Эквивалентно значению -2.

-V
-version
Вывести версию программы на устройство вывода диагностических сообщений.

-b
-byte-offset
Вывести относительный адрес байта в файле для каждой выводимой строки.

-c
-count
Запретить обычный вывод программы. Вместо него вывести число строк, которые удовлетворяют шаблону. Если этот параметр используется совместно с параметром -v (см. ниже), то будет выводится число строк не удовлетворяющих шаблону.

-e pattern
-regexp=pattern
Использовать pattern в качестве шаблона. Эта запись удобна, когда шаблон начинается со знака - (минус).

-f file
-file=file
Взять шаблон из файла с именем file. Эта возможность удобна при поиске с использованием символов Кириллицы.

-h
-no-filename
Запретить указание им©н файлов на выводе, если производится поиск по шаблону в нескольких файлах. По умолчанию будет указаны имена файлов, в которых найдены строки соответствующие шаблону.

-i
-ignore-case
Игнорировать различие в регистрах как в шаблоне так и во вводных файлах. Обратим внимание, что эта возможность отлично работает для Латиницы, но не всегда для Кириллицы.

-L
-files-without-match
Запретить обычный вывод. Вместо этого напечатать имя каждого последовательно проверяемого файла, в котором не найдено строк соответствующих шаблону. Операция будет остановлена как только будет найдена первая строка соответствующая шаблону или будет исчерпан список файлов.

-l
-files-with-matches
Запретить обычный вывод. Вместо него выдать имя каждого файла, в котором имются строки удовлетворяющие шаблону.

-n
-line-number
Выдать номера строк в файле вместе с самими строками удовлетворяющими шаблону.

-q
-quiet
Выполняться без вывода. Поиск строк соответствующих шаблону останавливается на первой же найденной строке. Если строка найдена, устанавливается код завершения 0, и 1 - в противном случае.

-s
-silent
Запретить сообщения об ошибках если встртились несуществуюшие или нечитаемые файлы (например, нет доступа по чтению).

-v
-revert-match
Инвертировать смысл соответствия шаблону, т.е. вывести строки, которые не соответствуют шаблону.

-w
-word-regexp
Вывести лишь те соответствия шаблону, которые совпадают с границами слова. Слово может содержать букву, цифру и подч©ркивание.

-x
-line-regexp
Вывести лишь те соответствия, которые представляют собой целую строку.

-y
удал©нный синоним для параметра -i.

Программа grep понимает две различные версии синтаксиса регулярных выражений: BASIC - основной и EXTENDED - расширенный. В GNU grep нет различий при использовании обоих видов синтаксиса. Регулярные выражения рассматриваются в разделе 4.5.

7.7.1 Несколько примеров с использованием grep

Для начала полезно получить версию программы grep
SPMquotgrep -V"
В ответ печатается:


grep (GNU grep) 2.1



Copyright (C) 1988, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR

PURPOSE.

Найти в файле Grep.tex все строки, которые содержат последовательность -i
grep -e -i Grep.tex
В ответ печатается


item [-i]

item [-y] удал"енный синоним для параметра {f -i}.

Найти в файле все строки которые содержат в первой слева позиции обратный слеш
SPMquotgrep ^

Grep.tex"
В ответ будут напечатаны все строки, которые содержат знак обратный слеш в первой слева позиции. А команда
SPMquotgrep -v ^

Grep.tex"
выведет на экран все строки, которые не содержат знака обратный слеш в═первой слева позиции. Ту же команду можно выполнить в другом варианте
SPMquotcat > Pattern"
SPMquot^
"
SPMquotCtrl/D"
SPMquotgrep -vf Pattern Grep.tex"
В последнем примере шаблон для поиска помещ©н в файл с именем Pattern. При этом вы могли обратить внимание, что использовано разное количество обратных слешей. Дело связано с тем, что обратные слеши сначала были обработаны оболочкой bash, а затем программой grep.


contents
Обновлено: 16.03.2015