Синтаксис регулярных выражений linux

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

Вступление

Регулярные выражения — очень мощный инструмент в Linux. Их можно использовать с различными программами, такими как bash, vi, rename, grep, sed и другими.

Этот сеанс знакомит вас с основами регулярных выражений.

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

Существует три версии синтаксиса регулярных выражений:

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

Например, инструмент grep имеет опцию -E, чтобы заставить строку считываться как ERE, а -G — BRE, а -P — PRCE.

Обратите внимание, что grep als имеет -F для буквального чтения строки.

Найдите файлы типа file (не каталог, труба и т. Д.), Заканчивающиеся на .conf.

У инструмента sed также есть опции для выбора синтаксиса регулярных выражений.

Прочитайте руководство по инструментам, которые вы используете!

Grep

печатать линии, соответствующие шаблону

grep — популярный инструмент Linux для поиска строк, соответствующих определенному шаблону. Ниже приведены некоторые примеры простейших регулярных выражений.

Это содержимое текстового файла. Этот файл содержит четыре строки (или четыре символа новой строки).

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

Сопоставление с образцом в этом примере должно быть очень простым; если данный символ встречается в строке, то grep вернет эту строку.

объединяющие символы

Два соединенных символа должны быть соединены одинаковым образом для совпадения.

Этот пример демонстрирует, что hi будет соответствовать Sachin, но не Sourav, а Rahual Bi будет соответствовать Vonod, но не Sachin и Sourav.

один или другой

PRCE и ERE используют символ канала для обозначения ИЛИ. В этом примере мы grep для строк, содержащих букву i или букву a.

Обратите внимание, что мы используем ключ -E grep, чтобы заставить интерпретировать нашу строку как ERE.

Нам нужно экранировать символ канала в BRE, чтобы получить то же логическое ИЛИ.

один или больше

Знак * означает ноль, один или несколько вхождений предыдущего, а знак + означает один или несколько предыдущих.

соответствует концу строки

Для следующих примеров мы будем использовать этот файл.

Два приведенных ниже примера показывают, как использовать символ доллара для соответствия концу строки.

сопоставить начало строки

Символ каретки (^) будет соответствовать строке в начале (или начале) строки.

Учитывая тот же файл, что и выше, вот два примера.

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

разделяющие слова

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

Простое совпадение даст слишком много результатов.

Окружение искомого слова пробелами не является хорошим решением (потому что другие символы могут быть разделителями слов). Этот экран ниже показывает, как использовать только для поиска искомого слова:

Обратите внимание, что у grep также есть опция -w для grep для слов.

особенности grep

Иногда проще объединить простое регулярное выражение с опциями grep, чем написать более сложное регулярное выражение. Эти варианты обсуждались ранее:

предотвращение расширения оболочки регулярного выражения

Знак доллара — это специальный символ, как для регулярного выражения, так и для оболочки (помните переменные и встроенные оболочки). Поэтому рекомендуется всегда указывать регулярное выражение, это предотвращает расширение оболочки.

переименовать

команда переименования

В Debian Linux команда / usr / bin / rename представляет собой ссылку на / usr / bin / prename, установленную пакетом perl.

Производные системы Red Hat не устанавливают одну и ту же команду переименования, поэтому в этом разделе не описывается переименование в Red Hat (если только вы не скопируете скрипт perl вручную).

В Интернете часто возникает путаница по поводу команды переименования, потому что решения, которые отлично работают в Debian (и Ubuntu, xubuntu, Mint, . ), не могут использоваться в Red Hat (и CentOS, Fedora, . ).

Perl

Читайте также:  Windows defender firewall download

Команда переименования на самом деле является сценарием perl, который использует регулярные выражения perl. Полное руководство для них можно найти, набрав perldoc perlrequick (после установки perldoc).

хорошо известный синтаксис

Наиболее распространенное использование переименования — это поиск имен файлов, соответствующих определенной строке, и замена этой строки другой строкой.

Это часто представляется как s / string / other string /, как показано в этом примере:

А вот еще один пример, который использует переименование с хорошо известным синтаксисом, чтобы еще раз изменить расширения тех же файлов:

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

Следующий пример показывает, что может пойти не так с этим синтаксисом.

Только первое вхождение искомой строки заменяется.

глобальная замена

Синтаксис, использованный в предыдущем примере, можно описать как s / regex / replace /. Это просто и понятно, вы вводите регулярное выражение между первыми двумя косыми чертами и заменяющую строку между последними двумя.

Этот пример лишь немного расширяет этот синтаксис, добавляя модификатор.

Синтаксис, который мы используем сейчас, может быть описан как s / regex / replace / g, где s обозначает switch, а g обозначает global.

Обратите внимание, что в этом примере используется ключ -n, чтобы показать, что делается (вместо фактического переименования файла).

замена без учета регистра

Еще один полезный модификатор — это i. В этом примере показано, как заменить строку без учета регистра другой строкой.

переименование расширений

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

Вот пример того, как использовать переименование, чтобы переименовать только расширение файла. Он использует знак доллара, чтобы отметить окончание имени файла.

Обратите внимание, что знак доллара в регулярном выражении означает в конце. Без знака доллара эта команда не будет выполнена в файле действительно.txt.txt.

СЕПГ

редактор потоков

Редактор потока или short sed использует регулярное выражение для редактирования потока.

В этом примере sed используется для замены строки.

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

интерактивный редактор

Хотя sed предназначен для использования в потоке, он также может использоваться в интерактивном режиме для файла.

простая обратная ссылка

Символ амперсанда может использоваться для ссылки на искомую (и найденную) строку.

В этом примере амперсанд используется для удвоения числа найденных строк.

обратная ссылка

Круглые скобки (часто называемые круглыми скобками) используются для группировки разделов регулярного выражения, чтобы впоследствии на них можно было ссылаться.

Рассмотрим этот простой пример:

точка для любого персонажа

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

множественные обратные ссылки

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

Эта функция называется группировкой.

пустое пространство

S может означать пробел, такой как пробел или табуляция.

Этот пример ищет пробелы в глобальном масштабе и заменяет их на 1 пробел.

необязательное вхождение

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

В приведенном ниже примере выполняется поиск трех последовательных букв o, но третий o является необязательным.

ровно n раз

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

между n и m раз

И здесь мы требуем ровно от 2 до 3 раз.

история Баш

Оболочка bash также может интерпретировать некоторые регулярные выражения. В этом примере показано, как управлять функцией истории восклицательных масок из оболочки bash.

Это также работает с историческими числами в bash.

Источник

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

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

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

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

— Калькулятор инсталляции IP — АТС Asterisk

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

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

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

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

Телефония

FreePBX и Asterisk

Читайте также:  Скриншот экрана windows mobile

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

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

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

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

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

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

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

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

  • «\text» — слова начинающиеся с text
  • «text/» — слова, заканчивающиеся на text
  • «^» — начало строки
  • «$» — конец строки
  • «a-z» — диапазон от a до z
  • «[^t]» — не буква t
  • «\[« — воспринять символ [ буквально
  • «.» — любой символ
  • «a|z» — а или z

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

grep — утилита поиска по выражению

  • egrep — расширенный grep
  • fgrep — быстрый grep
  • rgrep — рекурсивный grep
  • sed — потоковый текстовый редактор.

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

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

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

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

Первая команда — grep

Получаем справку по данной команде. Как можно понять из справки команда grep и ее производные — это печать линий совпадающих шаблонов. Проще говоря, команда grep помогает сортировать те данные, что мы даем команде, через знак конвейера на ввод. Причем в мануале мы можем видеть egrep, fgrep и т.д. данные команды мы можем не использовать. Использовать можно только grep с ключами различными, т.е. ключи просто заменяют эти команды. Можно на примере посмотреть, как работает данная команда. Например, grep oo file.txt

На картинке видно, что команда из указанного файла выбрала по определенному шаблону «oo». Причем даже делает красным цветом подсветку. Можно добавить еще ключик -n, тогда данная команда еще и выведет номер строки в которой находится то, что ищется по шаблону. Это полезно, когда работаем с каким-нибудь кодом или сценарием. Когда необходимо, что-то найти. Сразу видим, где находится объект поиска или что-то ищем по логам.

При использовании шаблона очень важно понимать, что команда grep, чувствительна к регистрам в шаблонах. Это означает, что Boo и boo это разные шаблоны. В одном случае команда найдет слово, а в другом нет. Можно команде сказать, чтобы она не учитывала регистр. Это делается с помощью ключа -i.

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

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

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

Читайте также:  Cmd не является внутренней или внешней командой windows 10

Давайте найдем файлы в которых содержится сочетание «ple«. grep ple file.txt в данном случае команда нашла оба слова содержащие шаблон. Давайте найдем слово, которое будет начинаться с «ple«. Команда будет выглядеть следующим образом: grep ^ple file.txt . Значок «^» указывает на начало строки. Противоположная задача найти слова, заканчивающиеся на «ple«. Команда будет выглядеть следующим образом grep ple$ file.txt . Т.е. применять к концу строки, говорит значок «$» в шаблоне.

Можно дать команду grep .o file.txt. В данном выражении знак «.» , заменяет любую букву.

Как вы видите вывод шаблона «.ple» вывел только одно слово т.к только слово couple удовлетворяло шаблону , т.к перед «ple» должен был содержаться еще один символ любой.

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

egrep (Extended grep)

man egrep — отошлет к справке по grep.

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

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

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

Получим все слова, начинающиеся с «a» по «к». Знак «[]» — диапазона. Как мы видим слова, начинающиеся с большой буквы, не попали. Все эти регулярные выражения очень пригодятся, когда мы что-то ищем в файлах логах.

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

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

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

Как вариант egrep можно запускать просто grep с ключиком -e.

Про fgrep

man fgrep — отошлет к справке по grep. Команда fgrep не понимает регулярных выражений вообще.

Получается следующим образом если мы вводим: egrep c$ file.txt . То команда согласно шаблону, ищет в файле букву «c» в конце слова. В случае же с командой fgrep c$ file.txt , команда будет искать именно сочетание «с$». Т.е. команда fgrep воспринимает символы регулярных выражений, как обычные символы, которые ей нужно найти, как аргументы.

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

Создадим каталог mkdir folder . Создадим файл great.txt в созданной директории folder со словом Hello при помощью команды echo «Hello» folder/great.txt

И если мы скажем grep Hello * , поищи слово Hello в текущей директории. Получится следующая картина.

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

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

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

Данная утилита пробежалась по всем папкам и файлам в них и нашла подходящее под шаблон слово. Т.е. если нам необходимо провести поиск по всем файлам и папкам, то необходимо использовать утилиту rgrep .

Команда sed

man sed — стрим редактор. Т.е потоковый редактор для фильтрации и редактирования потока данных.

Например, sed -e ‘s/oo/aa’ file.txt — открыть редактор sed и заменить вывод всех oo на aa в файле file.txt. Нужно понимать, что в результате данной команды изменения в файле не произойдут. Просто данные из файла будут взяты и с изменениями выведены на стандартный вывод, т.е. экран. Для сохранения результатов мы можем сказать, чтобы вывел в новый файл указав направление вывода.

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

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

Источник

Оцените статью