Основы программирования в Linux - Мэтью Нейл
Команда grep принимает опции, шаблон соответствия и файлы для поиска:
<b>grep</b> [<i>опции</i>]<i> шаблон</i> [<i>файлы</i>]
Если имена файлов не заданы, команда анализирует стандартный ввод.
Давайте начнем с изучения основных опций команды grep. И на этот раз в табл. 2.14 приведены только самые важные из них; полный список см. на страницах интерактивного справочного руководства.
Таблица 2.14
Опция Описание -с Вместо вывода на экран совпавших с шаблоном строк выводит их количество -E Включает расширенные регулярные выражения -h Ужимает обычное начало каждой строки вывода за счет удаления имени файла, в котором строка найдена -i Не учитывает регистр букв -l Перечисляет имена файлов со строками, совпадающими с шаблоном; не выводит сами найденные строки -v Меняет шаблон соответствия для выбора вместо строк, соответствующих шаблону, несовпадающих с ним строкВыполните упражнение 2.17.
Упражнение 2.17. Основной вариант использования команды grepПосмотрим команду grep в действии на примерах простых шаблонов.
$ <b>grep in words.txt</b>
When shall we three meet again. In thunder, lightning, or in rain?
I come, Graymalkin!
$ <b>grep -c in words.txt words2.txt</b>
words.txt:2 words2.txt:14
$ <b>grep -c -v in words.txt words2.txt</b>
words.txt:9
words2.txt:16$
Как это работает
В первом примере нет опций; в нем просто ищется строка in в файле words.txt и выводятся на экран любые строки, соответствующие условию поиска. Имя файла не отображается, поскольку поиск велся в единственном файле.
Во втором примере в двух разных файлах подсчитывается количество строк, соответствующих шаблону. В этом случае имена файлов выводятся на экран.
В заключение применяется опция -v для инвертирования критерия поиска и подсчета строк, не совпадающих с шаблоном.
Регулярные выраженияКак вы убедились, основной вариант применения команды grep легко усвоить. Теперь пришло время рассмотреть основы построения регулярных выражений, которые позволят вам выполнять более сложный поиск. Как упоминалось ранее в этой главе, регулярные выражения применяются в системе Linux и многих языках программирования с открытым исходным кодом. Вы можете использовать их в редакторе vi и в скриптах на языке Perl, применяя одни и те же принципы, общие для регулярных выражений, где бы они ни появлялись.
При обработке регулярных выражений определенные символы интерпретируются особым образом. В табл. 2.15 приведены наиболее часто используемые в регулярных выражениях символы.
Таблица 2.15
Символ Описание ^ Привязка к началу строки $ Привязка к концу строки . Любой одиночный символ [] В квадратных скобках содержится диапазон символов, с любым из них возможно совпадение, например, диапазон символов a-e или инвертированный диапазон, перед которым стоит символ ^Если вы хотите использовать любые из перечисленных символов как "обычные", поставьте перед ними символ . Например, если нужно найти символ $, просто введите $.
Есть также несколько полезных специальных проверочных шаблонов, которые могут указываться в квадратных скобках (табл. 2.16).
Таблица 2.16
Проверочный шаблон Описание [:alnum:] Буквенно-цифровые символы [:alpha:] Буквы [:ascii:] Символы таблицы ASCII [:blank:] Пробел или табуляция [:cntrl:] Управляющие символы ASCII [:digit:] Цифры [:graph:] Неуправляющие и непробельные символы [:lower:] Строчные буквы [:print:] Печатные символы [:punct:] Знаки пунктуации [:space:] Пробельные символы, включая вертикальную табуляцию [:upper:] Прописные буквы [:xdigit:] Шестнадцатиричные цифрыКроме того, если задана опция =E для расширенного соответствия, за регулярным выражением могут следовать и другие символы, управляющие выполнением проверки на соответствие шаблону (табл. 2.17). В команде grep перед этими символами необходимо вводить символ .
Таблица 2.17
Опция Описание ? Совпадение не обязательно, но возможно не более одного раза * Совпадения может не быть, оно может быть однократным или многократным + Совпадение должно быть однократным или многократным {<i>n</i>} Совпадение должно быть <i>n</i> раз {<i>n</i>, } Совпадение должно быть <i>n</i> раз и больше {<i>n</i>, <i>m</i>} Совпадение должно быть от <i>n</i> до <i>m</i> раз включительноОткройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Основы программирования в Linux - Мэтью Нейл, относящееся к жанру Интернет. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.


