Э. Сивер, С. Спейнауэр, С. Фиггинс, Дж. П. Хекман - Linux cправочник - 3-е издание (1114666), страница 93
Текст из файла (страница 93)
Чтобы обойти расширение спецсимволов интерпретатором,необходимо экранировать их кавычками:$ grep "[A-Z]*" chap[12]В большинстве случаев достаточно двойных кавычек, но самым безопаснымвариантом являются кавычки одинарные.Отметьте также, что символы * и ? имеют немного разный смысл для поискапо шаблону и расширения имен файлов.Метасимволы в программах LinuxНекоторые специальные символы могут использоваться не во всех программах.
Метасимволы, доступные в определенной программе, отмечены в следующей таблице точкой (•). Примечания даны после таблицы, а полное опи1сание всех символов можно найти в следующем подразделе.Символ ed*1visedawkgrep egrep Значение••••••Любой символ (в gawk включает символ новой строки)••••••Любое количество вхождений предшествующего символа (даже нулевое)В некоторых из указанных программ (в зависимости от версии) поддерживаемыерегулярные выражения могут несколько отличаться от приведенных здесь. Еслиповедение указанного регулярного выражения отличается от ожидаемого, следует обратиться к документации. - Примеч. науч.ред.Метасимволы в программах LinuxСимволedvisedawk635grep egrep Значение"• Привязка к началу строки$• Привязка к концу строки\• Экранирует следующий символ[]• Один из перечисленных символов илисимвол из диапазона\( \)•••Сохранить найденный текст для последующего использования\п•••Повторное использование текста, найденного и сохраненного л-ным вхождением элемента \( \){ }\{ \>\< \>•••Диапазон символов•••Диапазон символовПривязка к началу или к концу слова+••• Одно или более вхождений предшествующего символа?••• Отсутствие или одно вхождение предшествующего символа1•• Варианты шаблона( )•• Группировка выражений для поискаВ некоторых дистрибутивах Linux grep является ссылкой на egrep, поэтомукоманда grep на самом деле вызывает egrep.При выполнении операции подстановки (поиска и замены) с помощью редакторов ed, vi и sed метасимволы приведенной таблицы имеют смысл только в шаблонах поиска, но не в строке замены.При работе с awk следует помнить, что символы { }, упомянутые в стандартеPOSIX, поддерживаются gawk только при запуске с параметром — Wre-interval.Следующие дополнительные метасимволы в редакторах ed, vi и sed доступны только для применения в шаблонах замены:Символ ех sed ed Значение\• • •Экранировать следующий символ\п• • •Вставить текст, найденный n-ным вхождением \( \)&• •Вставить предыдущий шаблон поиска636Глава 9.
Шаблоны и поискСимвол ех sed ed ЗначениеВставить предыдущий шаблон замены\еОтменить предыдущий метасимвол \и или \1\ЕОтменить предыдущий метасимвол \U или \L\1Сменить регистр следующего символа на нижний\LСменить на нижний регистр следующих символов вплоть до \Е\uСменить регистр следующего символа на верхний\UСменить на верхний регистр следующих символов вплоть до \ЕМетасимволыСледующие символы имеют специальное значение только в шаблонах поиска:Символ ЗначениеСоответствует любому одиночному символу, кроме символа новой строки(newline)Соответствует любому количеству вхождений (или ни одного) непосредственно предшествующего символа.
Предшествующий символ также можетбыть регулярным выражением, например, поскольку «.» (точка) означаетлюбой символ, выражение .* означает найти любое количество любыхсимволов (кроме символов конца строки)Найти соответствие следующему регулярному выражению в начале строкиНайти соответствие следующему регулярному выражению в конце строки$[]Найти любой из перечисленных символов. Диапазон символов можно задавать с помощью символа - (дефис).
Диакритический символ ', будучи первым символом среди перечисленных, меняет смысл выражения напротивоположный - выполняется поиск символа, не входящего в указанный список. Дефис или закрывающая скобка (]) в качестве первого элемента списка интерпретируются как обычные символы.
Все прочие специальные символы также считаются элементами списка[" ]Найти любой символ, не относящийся к перечисленным\{п.т\}Найти определенное количество вхождений непосредственно предшествующего символа. Предшествующий символ может быть регулярным выражением.
По выражению \ { п \ } выполняется поиск ровно п вхождений символа, по выражению \{п, \} - поиск по крайней мере п вхождений символа,выражение \ {п, т\} задает диапазон для количества вхождений от п до тАналогично \{п, т\}. Метасимвол доступен по умолчанию в grep, а также вgawk при использовании ключа — Wre-intervalМетасимволы637Символ Значение\Интерпретировать буквально непосредственно следующий символ, не используя его специальное значение\( \)Сохранить найденное соответствие шаблону между символами \( и \) в специальной переменной. В одной строке можно сохранять до девяти соответствий. В шаблонах подстановки эти записи можно воспроизводить специальными escape-последовательностями от \1 до \9Вставить текст, найденный л-ным вхождением \( \)( )В egrep и gawk сохранять найденный текст, заключенный в символы \( и \)в специальной переменной.
Для каждой строки шаблонов может быть задано до девяти таких соответствий. Они могут быть воспроизведены в шаблоне подстановки при помощи escape-последовательностей от \1 до \9\< \>Найти соответствие в начале ( \<) или в конце слова (\>)Найти одно или более вхождений предшествующего регулярного выраженияНайти одно либо ни одного вхождения предшествующего регулярного выраженияНайти соответствие предшествующему или следующему регулярному выражениюГруппировка регулярных выраженийМногие инструменты в Linux поддерживают и списки символов стандартаPOSIX, что позволяет выполнять поиск не-ASCII символов из языков, отличных от английского. Такие списки задаются диапазонами символов, заключаемыми в квадратные скобки [ ]. Так, [[:Iower:]] является эквивалентом[a-z].В следующей таблице перечислены списки символов POSIX:ЗаписьСодержание[:alnum:]Буквенно-цифровые символы[:alpha:]Буквы любого регистра[:blank:]Отображаемые разделители: пробелы и символы табуляции, но не управляющие символы[:cntrl:]Управляющие символы, например от "А до "Z[rdigit:]Десятичные цифры[:graph:]Отображаемые символы, кроме пробелов и символов табуляции[:lower:]Буквы нижнего регистра[:print:]Отображаемые символы, включая пробелы и символы табуляции, но неуправляющие символы[:punct:]Символы пунктуации, подмножество отображаемых символовГлава 9.
Шаблоны и поиск638ЗаписьСодержание[:space:]Пробелы, символы табуляции и некоторые управляющие символов[:upper:]Буквы верхнего регистра[:xdigit:]Шестнадцатеричные цифрыСледующие символы имеют специальное значение в шаблонах подстановки:СимволЗначение\Экранировать следующий символ\пВставить текст, сохраненный n-ным шаблоном \( и \). Здесь п — число от 1до 9, порядок нумерации найденных соответствий - слева направоИспользовать шаблон поиска в качестве части шаблона заменыИспользовать предыдущий шаблон замены в текущем\еОтменить действие шаблона замены \1 или \и\ЕОтменить действие шаблона замены \1_ или \1)\1Сменить регистр первого символа шаблона замены на нижний\LСменить на нижний регистр следующих символов шаблона замены\uСменить регистр первого символа шаблона замены на верхний\UСменить на верхний регистр следующих символов шаблона заменыПримеры поискаПри работе с grep или egrep регулярные выражения заключаются в кавычки.
(Если шаблон содержит символ $, необходимо использовать одинарныекавычки, например '$200', либо экранировать символ $: "\$200".) При работе с ed, ex, sed и awk регулярные выражения обычно заключаются в парусимволов / (хотя работает любой ограничитель). Приведем несколько примеров шаблонов:ШаблонРезультат поискаbagСтрока bagAbagСлово «bag» в начале строкиbag$Слово «bag» в конце строки~bag$Слово «bag» как единственное слово в строке[Bb]agСлово «bag» или «Bag»b[aeiou]gВторая буква является гласнойb[~aeiou]gВторая буква является согласной (либо буквой верхнего регистра, либосимволом)639Примеры поискаШаблонРезультат поискаb.gВторая буква является любым символом, кроме символа новой строки\..$Любая строка, содержащая ровно три буквыЛ-Строка, которая начинается с точки~\.[a-z][a-z]То же, за точкой следуют две строчные буквы (так выглядят, например, запросы troff)-\.[a-z]\{2\} То же, что и в предыдущем случае, но только для grep или sedТ-]Любая строка, которая не начинается с точкиbugs*Слова «bug», «bugs», «bugss» и т.
д."word"Слово word в кавычках"*word"*Слово word в кавычках или без[A-Z][A-Z]* Одна или больше прописных буквТо же, но только для egrep или awk[A-Z].*Прописная буква, за которой следует произвольное количество (включая нулевое) любых символов[A-Z]*Произвольное количество (включая нулевое) прописных букв[a-zA-Z]Любая буква[0-9A-Za-z]+ Любая буквенно-цифровая последовательностьШаблон egrep или awkРезультат поиска[567]Одно из чисел 5, 6 или 7five | six | sevenОдно из слов five, six или seven80[23]?868086, 80286 или 80386Compan(y|ies)Слово company или companiesШаблон viРезультат поиска\<theСлова вроде theater или thethe\>Слова вроде breathe или the\<the\>Слово theШаблон sed или grepРезультат поиска0\{5,\}Пять или более нулей подряд[0-9]\{3\}-[0-9]\{2\}-[0-9]\{4\}Номер социального страхования ( ппп-пп-пппп)Глава 9.