Что такое регулярные выражения linux

Глава 18. Регулярные выражения

Для того, чтобы полностью реализовать потенциал командной оболочки, вам придется овладеть Регулярными Выражениями. Многие команды и утилиты, обычно используемые в сценариях, такие как grep, expr, sed и awk, используют Регулярные Выражения.

18.1. Краткое введение в регулярные выражения

Выражение «13.» будет означать 13 + по меньшей мере один любой символ (включая пробел): 1133, 11333, но не 13 (отсутствуют дополнительные символы).

Выражение «^$» соответствует пустой строке.

Выражение «[c-n]» соответствует одному из символов в диапазоне от c до n, включительно.

Выражение «[B-Pk-y]» соответствует одному из символов в диапазоне от B до P или в диапазоне от k до y, включительно.

Выражение «[a-z0-9]» соответствует одному из символов латиницы в нижнем регистре или цифре.

Выражение «[^b-d]» соответствует любому символу, кроме символов из диапазона от b до d, включительно. В данном случае, метасимвол ^ означает отрицание.

Объединяя квадратные скобки в одну последовательность, можно задать шаблон искомого слова. Так, выражение «[Yy][Ee][Ss]» соответствует словам yes, Yes, YES, yEs и так далее. Выражение «229-98-8735» определяет шаблон для поиска любого номера карточки социального страхования (для США).

Угловые скобки должны экранироваться, иначе они будут интерпретироваться как простые символы.

Дополнительные метасимволы. Использующиеся при работе с egrep, awk и Perl

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Язык программирования Perl и некоторые версии egrep не требуют экранирования фигурных скобок.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Некоторые версии sed, ed и ex поддерживают экранированные версии регулярных выражений, описанных выше.

Классы символов POSIX. [:class:]

Это альтернативный способ указания диапазона символов.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Вообще, символьные классы POSIX требуют заключения в кавычки или двойные квадратные скобки ([[ ]]).

Эти символьные классы могут использоваться, с некоторыми ограничениями, даже в операциях подстановки имен файлов (globbing).

Примеры использования символьных классов в сценариях вы найдете в Пример 12-14 и Пример 12-15.

Sed, awk и Perl, используемые в сценариях в качестве фильтров, могут принимать регулярные выражения в качестве входных аргументов. См. Пример A-13 и Пример A-19.

Книга «Sed & Awk» (авторы Dougherty и Robbins) дает полное и ясное представление о регулярных выражениях (см. раздел Литература).

Примечания

В качестве простейшего регулярного выражения можно привести строку, не содержащую никаких метасимволов.

Поскольку с помощью sed, awk и grep обрабатывают одиночные строки, то обычно символ перевода строки не принимается во внимание. В тех же случаях, когда производится разбор многострочного текста, метасимвол «точка» будет соответствовать символу перевода строки.

Источник

ИТ База знаний

Полезно

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Регулярные выражения в Linux

На регулярной основе

Интересным вопросом в Linux системах, является управление регулярными выражениями. Это полезный и необходимый навык не только профессионалам своего дела, системным администраторам, но, а также и обычным пользователям линуксоподобных операционных систем. В данной статье я постараюсь раскрыть, как создавать регулярные выражения и как их применять на практике в каких-либо целях. Основной областью применение регулярных выражений является поиск информации и файлов в линуксоподобных операционных системах.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Для работы в основном используются следующие символы:

Регулярные выражения в основном используются со следующими командами:

А особенно с утилитой grep. Данная утилита используется для сортировки результатов чего либо, передавая ей результаты по конвейеру. Эта утилита осуществляет поиск и передачу на стандартный вывод результат его. ЕЕ можно запускать с различными ключами, но можно использовать ее другие варианты, которые представлены выше.

И есть еще потоковый текстовый редактор. Это не полноценный текстовый редактор, он просто получает информацию построчно и обрабатывает. После чего выводит на стандартный вывод. Он не изменяет текстовый вывод или текстовый поток, он просто редактирует перед тем как вывести его для нас на экран.

Начнем со следующего. Создадим один пустой файл file1.txt, через команду touch. Создадим в текстовом редакторе в той же директории файл file.txt.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Как мы видим в файле file.txt просто набор слов. Далее мы с помощью данных слов посмотрим, как работают команды.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Посмотрим содержимое нашего каталога командой ls, а затем отфильтруем только то, что заканчивается на «ile«.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Получается следующее, когда мы даем на ввод команде grep шаблон и где искать, он работает с файлом, а когда мы даем команду ls она выводи содержимое каталога и мы это содержимое передаем по конвейеру на команду grep с заданным шаблоном. Соответственно grep фильтрует переданное содержимое согласно шаблона и выводит на экран. Получается, что команде grep дали, то команда и обработала.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Наглядно можно посмотреть на рисунке выше. Мы просматриваем командой cat содержимое файла и подаем на ввод команде grep с фильтрацией по шаблону.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Попробуем рассмотреть другую команду egrep.

egrep (Extended grep)

Данная команда позволяет использовать более расширенный набор шаблонов. Рассмотрим следующий пример команды:

Шаблон заключается в одинарные кавычки, для того чтобы экранировать символы, и команда egrep поняла, что это относится к ней и воспринимала выражение как шаблон. Сам же шаблон означает, что поиск будет искать слова, в начале строки (знак ^) содержащие букву b или d.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Мы видим, что команда вернула слова, начинающиеся с буквы b или d. Рассмотрим другой вариант использования команды egrep. Например:

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Усложним еще шаблон. Возьмем следующий:

Усложняя выражение, мы добавили диапазон заглавных букв сказав команде grep искать диапазон маленьких или диапазон больших букв с начала строки.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Вот теперь все хорошо. Слова с Заглавными буквами тоже отобразились.

Про fgrep

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Рекурсивный rgrep

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Как мы видим grep не может искать в папках. Для таких случаев и используется утилита rgrep.

Дает следующую картину.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Совершенно спокойно в папке найдено было, то что подходило под шаблон.

Команда sed

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

В данном редакторе мы можем ему сказать использовать регулярные выражения, для этого необходимо добавить ключ -r. У данного редактора очень большой функционал.

Источник

Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linuxДоброго времени, гости!

Начну с того, что существует несколько разновидностей регулярных выражений:

1. Традиционные регулярные выражения (они же основные, базовые и basic regular expressions (BRE))

2. Расширенные регулярные выражения (они же extended regular expressions (ERE))

3. Регулярные выражения, совместимые с Perl (они же Perl-compatible regular expressions (PCRE))

Регулярные выражения состоят из шаблонов, вернее сказать задают шаблон поиска. Шаблон состоит из правил поиска, которые составляются из символов и метасимволов.

Правила поиска определяются следующими операциями:

Перечисление |

Группировка или объединение ( )

Круглые скобки используются для определения области действия и приоритета операторов. Например, «gray|grey» и «gr(a|e)y» являются разными образцами, но они оба описывают множество, содержащее gray и grey.

Квантификатор после символа или группы определяет, сколько раз предшествующее выражение может встречаться.

общее выражение, повторений может быть от m до n включительно.

общее выражение, m и более повторений.

общее выражение, не более n повторений.

ровно n повторений.

Знак вопроса означает 0 или 1 раз, то же самое, что и . Например, «colou?r» соответствует и color, и colour.

Звёздочка означает 0, 1 или любое число раз ( ). Например, «go*gle» соответствует ggle, gogle, google и др.

Плюс означает хотя бы 1 раз ( ). Например, «go+gle» соответствует gogle, google и т. д. (но не ggle).

Конкретный синтаксис данных регулярных выражений зависит от реализации. (то есть в базовых регулярных выражениях символы — экранируются обратным слешем)

. Выражение, заключённое в «\(» и «\)» и сопровождаемое «*», следует считать неправильным. В некоторых случаях, оно соответствует нулю или более вхождений строки, которая была заключена в скобки. В других, оно соответствует выражению, заключённому в скобки, учитывая символ «*».

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux
\<x,y\>Соответствует последнему (предстоящему) блоку, встречающемуся не менее x и не более y раз. Например, «a\<3,5\>» соответствует «aaa», «aaaa» или «aaaaa». В отличие от других операторов, этот (в традиционном синтаксисе) требует бэкслеша.
.*Обозначение любого количества любых символов между двумя частями регулярного выражения.

Метасимволы нам помогают использовать различные соответствия. Но как же представить метасимвол обычным символом, то есть символ [ (квадратная скобка) значением квадратной скобки? Просто:

POSIX классаналогичнообозначение
[:upper:][A-Z]символы верхнего регистра
[:lower:][a-z]символы нижнего регистра
[:alpha:][A-Za-z]символы верхнего и нижнего регистра
[:alnum:][A-Za-z0-9]цифры, символы верхнего и нижнего регистра
[:digit:]1цифры
[:xdigit:][0-9A-Fa-f]шестнадцатеричные цифры
[:punct:][. …]знаки пунктуации
[:blank:][ \t]пробел и TAB
[:space:][ \t\n\r\f\v]символы пропуска
[:cntrl:]символы управления
[:graph:][^ \t\n\r\f\v]символы печати
[:print:][^\t\n\r\f\v]символы печати и символы пропуска

В regex есть такое понятие как:

Жадность regex

Итак, Как создать RAID уровня 10/50 на контроллере LSI MegaRAID (актуально и для: Intel SRCU42x, Intel SRCS16):

> будет принадлежать данному правилу!

Надеюсь, на примере понятно что такое жадность. Чтобы избавиться от данной жадности, можно пойти по следующему пути:

Все вышенаписанное хочу дополнить синтаксисом расширенных регулярных выражений:

Регулярные выражения в POSIX аналогичны традиционному Unix-синтаксису, но с добавлением некоторых метасимволов:

Плюс указывает на то, что предыдущий символ или группа может повторяться один или несколько раз. В отличие от звёздочки, хотя бы одно повторение обязательно.

Знак вопроса делает предыдущий символ или группу необязательной. Другими словами, в соответствующей строке она может отсутствовать, либо присутствовать ровно один раз.

Вертикальная черта разделяет альтернативные варианты регулярных выражений. Один символ задаёт две альтернативы, но их может быть и больше, достаточно использовать больше вертикальных чёрточек. Необходимо помнить, что этот оператор использует максимально возможную часть выражения. По этой причине, оператор альтернативы чаще всего используется внутри скобок.

Также было отменено использование обратной косой черты: \ <…\>становится <…>и \(…\) становится (…).

В завершение поста, приведу некоторые примеры использования regex:

Источник

Кунг-фу стиля Linux: регулярные выражения

Если вы считаете, что умеете готовить, то может, вы знаете о том, как сделать суфле или пахлаву, а может — и не знаете. Но есть кое-что такое, чему вы, вероятно, научились, просто готовя разные блюда. Например, вы, скорее всего, можете вскипятить воду, можете правильно разбить яйцо, можете поджарить мясо. Если говорить о работе в Linux или Unix, то тут тоже можно сделать похожие наблюдения. Возможно, вы не знаете о том, как установить сервер Wayland, или о том, как написать модуль ядра. Но есть определённые базовые навыки, вроде работы с файлами или редактирования текстов, которые люди осваивают независимо от того, чем они занимаются, навыки, которые помогают им в самых разных ситуациях. Один из навыков, полезных в самых разных ситуациях, овладение которым часто вызывает определённые сложности, это — умение пользоваться регулярными выражениями. Многие программы используют их в качестве средства описания шаблонов поиска чего-либо. Обычно — для поиска данных в строках, например — в файлах с каким-то текстом.

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Если вы не очень хорошо умеете пользоваться регулярными выражениями, знайте, что это легко исправить. Их не так уж и сложно изучить, кроме того — существуют замечательные инструменты, которые способны помочь при работе с регулярными выражениями. Сами регулярные выражения используются во многих утилитах. При этом везде используются одни и те же базовые синтаксические конструкции регулярных выражений. Источником путаницы, правда, являются особенности устройства регулярных выражений в разных средах. То, что выходит за рамки базовых синтаксических конструкций, в разных местах может различаться.

Разберём основы регулярных выражений, то, что нужно для того, чтобы хорошо их понимать и эффективно использовать.

Программы, в которых используются регулярные выражения

Возможно, первая программа, о которой вспоминают, когда говорят о регулярных выражениях, это — grep. Это — простая утилита, которая принимает регулярное выражение и имя файла (или несколько имён). Источником данных для неё может служить и стандартный поток ввода. В обычном режиме работы эта утилита выводит строки, в которых найдено совпадение с регулярным выражением. Это — простая, но мощная программа, она является одним из популярнейших инструментов командной строки. Именно поэтому я и решил построить примеры к этой статье на её основе.

Но grep — это далеко не единственная программа, использующая регулярные выражения. Среди других программ, в которых применяются регулярные выражения, можно отметить awk, sed, perl, разные редакторы, вроде Vim и emacs. Этот список можно продолжать ещё очень долго. Столь широкая распространённость регулярных выражений ведёт к тому, что их можно увидеть, например, в неких настройках программ, они встречаются даже в веб-приложениях, где используются для расширения возможностей этих приложений.

Поиск строк по шаблонам и классы

Взгляните на следующий пример:

Эта команда просмотрит файл somefile.txt и найдёт следующие строки:

▍Точка — это универсальный символ

▍Экранирование символов

Если точка — это «универсальный символ», то как тогда найти строки, в которых есть точка? Для этого можно воспользоваться экранированием символов с использованием обратной косой черты. Этот приём можно использовать в применении к любым специальным символам. В результате регулярное выражение d\.g найдёт строку d.g и ничего другого. Правда, тут стоит помнить о том, что символ обратной косой черты может иметь особый смысл в различных программах. Например, посмотрите на этот сеанс работы с egrep.

Использование обратной косой черты

▍Классы символов

Иногда того, кто использует регулярные выражения, не интересует один заранее заданный символ. Но его при этом не устроит и поиск любого символа. В таких ситуациях в дело вступают классы символов. Например:

Повторы

▍Продвинутое описание повторов

В более продвинутых регулярных выражениях для описания повторов можно пользоваться фигурными скобками, указывая в них то, сколько раз может повторяться шаблон. Некоторые инструменты требуют экранирования символов фигурных скобок. При работе с grep экранировать их не нужно. То есть, например, если нужно найти четыре буквы, записанные в нижнем регистре, можно воспользоваться конструкцией [a-z] <4>.

▍В разных программах обработка повторов различается

Привязка шаблона к началу и к концу строки

Группировка

Существует несколько способов группировки регулярных выражений. Можно использовать скобки (правда, некоторые инструменты требуют их экранирования при использовании их для группировки шаблонов). Вот пример:

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

В чём польза регулярных выражений? Зачем их изучать?

Варианты регулярных выражений

К сожалению, между способами использования регулярных выражений существуют небольшие различия. Вот что однажды сказал по этому поводу Дональд Кнут: «Я определяю UNIX, как 30 определений регулярных выражений, живущих под одной крышей».

Я уже говорил о некоторых из этих различий. Например, некоторые реализации регулярных выражений воспринимают скобки как группировочные символы в том случае, если они не экранированы. А другие, при таком их использовании, требуют их экранировать. Иначе скобки будут восприниматься как обычные символы.

Инструменты для отладки регулярных выражений

Собственно говоря, это — всё, что нужно знать о регулярных выражениях для начала работы с ними. Если вы хотите отлаживать регулярные выражения в интерактивном режиме, то знайте, что существует множество хороших инструментов, направленных на решение этой задачи. Ещё можно строить схемы регулярных выражений. Это помогает лучше понимать их смысл.

Возможно, вам пригодится библиотека регулярных выражений, из которой можно, так сказать, что-нибудь позаимствовать. А если вы хотите изучать регулярные выражения в игровой форме — можете заглянуть сюда и сюда.

Пользуетесь ли вы регулярными выражениями, работая в Linux?

Источник

Регулярные выражения Linux

Это далеко не полный список, регулярные выражения позволяют делать намного больше. Но для новых пользователей они могут показаться слишком сложными, поскольку для их формирования используется специальный язык. Но учитывая предоставляемые возможности, регулярные выражения Linux должен знать и уметь использовать каждый системный администратор.

В этой статье мы рассмотрим регулярные выражения bash для начинающих, чтобы вы смогли разобраться со всеми возможностями этого инструмента.

Регулярные выражения Linux

В регулярных выражениях могут использоваться два типа символов:

обычный_символ спецсимвол_оператор

спецсимвол_замены спецсимвол_оператор

Если оператор не указать, то будет считаться, что символ обязательно должен встретится в строке один раз. Таких конструкций может быть много. Вот основные метасимволы, которые используют регулярные выражения bash:

Важно отметить, что перед буквенными спецсимволами нужно использовать косую черту, чтобы указать, что дальше идет спецсимвол. Правильно и обратное, если вы хотите использовать спецсимвол, который применяется без косой черты в качестве обычного символа, то вам придется добавить косую черту.

Например, вы хотите найти в тексте строку 1+ 2=3. Если вы используете эту строку в качестве регулярного выражения, то ничего не найдете, потому что система интерпретирует плюс как спецсимвол, который сообщает, что предыдущая единица должна повториться один или больше раз. Поэтому его нужно экранировать: 1 \+ 2 = 3. Без экранирования наше регулярное выражение соответствовало бы только строке 11=3 или 111=3 и так далее. Перед равно черту ставить не нужно, потому что это не спецсимвол.

Примеры использования регулярных выражений

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

egrep «false$» /etc/passwd

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Чтобы вывести имена пользователей, которые начинаются на s или d используйте такое выражение:

egrep «^[sd]» /etc/passwd

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linuxТакой же результат можно получить, использовав символ «|». Первый вариант более пригоден для диапазонов, а второй чаще применяется для обычных или/или:

egrep «^[s|d]» /etc/passwd

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Теперь давайте выберем всех пользователей, длина имени которых составляет не три символа. Имя пользователя завершается двоеточием. Мы можем сказать, что оно может содержать любой буквенный символ, который должен быть повторен три раза, перед двоеточием:

Что такое регулярные выражения linux. Смотреть фото Что такое регулярные выражения linux. Смотреть картинку Что такое регулярные выражения linux. Картинка про Что такое регулярные выражения linux. Фото Что такое регулярные выражения linux

Выводы

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

На завершение лекция от Яндекса про регулярные выражения:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *