Группы захвата регулярных выражений bash

Символ «звёздочка»

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

$ echo «test» | awk ‘/tes*t/{print $0}’
$ echo «tessst» | awk ‘/tes*t/{print $0}’

1
2

$echo»test»|awk’/tes*t/{print $0}’

$echo»tessst»|awk’/tes*t/{print $0}’

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

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

$ echo «I like green color» | awk ‘/colou*r/{print $0}’
$ echo «I like green colour » | awk ‘/colou*r/{print $0}’

1
2

$echo»I like green color»|awk’/colou*r/{print $0}’

$echo»I like green colour «|awk’/colou*r/{print $0}’

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

В этом примере одно и то же регулярное выражение реагирует и на слово «color», и на слово «colour». Это так благодаря тому, что символ «u», после которого стоит звёздочка, может либо отсутствовать, либо встречаться несколько раз подряд.

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

$ awk ‘/this.*test/{print $0}’ myfile

1 $awk’/this.*test/{print $0}’myfile

Шаблон, реагирующий на любое количество любых символов

В данном случае неважно сколько и каких символов находится между словами «this» и «test». Звёздочку можно использовать и с классами символов:

Звёздочку можно использовать и с классами символов:

$ echo «st» | awk ‘/s*t/{print $0}’
$ echo «sat» | awk ‘/s*t/{print $0}’
$ echo «set» | awk ‘/s*t/{print $0}’

1
2
3

$echo»st»|awk’/s*t/{print $0}’

$echo»sat»|awk’/s*t/{print $0}’

$echo»set»|awk’/s*t/{print $0}’

Использование звёздочки с классами символов

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

Диапазоны символов

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

Описание диапазона символов в символьном классе

В данном примере регулярное выражение реагирует на последовательность символов «st», перед которой находится любой символ, расположенный, в алфавитном порядке, между символами «e» и «p».

Диапазоны можно создавать и из чисел:

Регулярное выражение для поиска трёх любых чисел

В класс символов могут входить несколько диапазонов:

Класс символов, состоящий из нескольких диапазонов

Данное регулярное выражение найдёт все последовательности «st», перед которыми есть символы из диапазонов и .

Якорные символы

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

Поиск шаблона в начале строки

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

Поиск шаблона в начале строки в тексте из файла

При использовании sed, если поместить крышку где-нибудь внутри шаблона, она будет восприниматься как любой другой обычный символ:

Крышка, находящаяся не в начале шаблона в sed

В awk, при использовании такого же шаблона, данный символ надо экранировать:

Крышка, находящаяся не в начале шаблона в awk

С поиском фрагментов текста, находящихся в начале строки мы разобрались. Что, если надо найти нечто, расположенное в конце строки?

В этом нам поможет знак доллара — , являющийся якорным символом конца строки:

Поиск текста, находящегося в конце строки

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

Шаблон, в котором использованы специальные символы начала и конца строки

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

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

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

2 ответа

Лучший ответ

Как показывает Сайрус в своем ответе, упрощенная версия вашего кода — с тем же вводом — работает в Linux в принципе .

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

Другими словами: и пусты по определению.

Однако обратите внимание, что если сигнализирует об успехе, никогда не будет полностью пустым: по крайней мере — при отсутствии каких-либо групп захвата — быть определенным. Есть несколько общих моментов, на которые стоит обратить внимание:

Есть несколько общих моментов, на которые стоит обратить внимание:

  • Ваша строка Шебанга читается как , что фактически совпадает с .

    • обычно используется, если вы хотите, чтобы выполнялась версия , отличная , кроме , которую вы установили позже и поместили в переменную PATH (тоже) : р >

    • ghoti указывает, что еще одной причиной использования является также поддержка менее распространенных платформ например, FreeBSD, где , если установлен, находится в , а не в обычном .

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

  • является одной из немногих функций Bash, которые зависят от платформы : он использует определенный диалект регулярного выражения, реализованный библиотеками регулярных выражений платформы.

    • — это ярлык класса символов, который доступен не на всех платформах , особенно в macOS; POSIX-совместимый эквивалент — .

    • (Однако в вашем конкретном случае должен работать, потому что ваш вывод Bash предполагает, что вы находитесь в дистрибутиве Linux.)

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

3

Community
23 Май 2017 в 12:17

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

Обратите внимание на следующее:

Я делаю это и на macOS, но я получаю то же поведение на FreeBSD.

Просто замените на , на и т. Д., И все будет хорошо. Если вы избегаете использования ярлыков RE, ваши выражения будут более понятны.

1

ghoti
31 Мар 2017 в 19:19

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

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

На наш взгляд даже абсолютный новичок сходу поймёт, как оно устроено и зачем нужно :) Если же вам не вполне понятно — просто читайте дальше и всё встанет на свои места.
Регулярное выражение — это шаблон, пользуясь которым программы вроде sed или awk фильтруют тексты. В шаблонах используются обычные ASCII-символы, представляющие сами себя, и так называемые метасимволы, которые играют особую роль, например, позволяя ссылаться на некие группы символов.

Опции — расширения GNU

Опции
-A —after-context=ЧИСЛО_СТРОК

-B —before-context=ЧИСЛО_СТРОК

-C —context=ЧИСЛО_СТРОК

С этими тремя опциями мы уже познакомились в четвертой Хитрости, они позволяют посмотреть соседние строки. -A: количество строк после совпадения с ОБРАЗЦОМ,

-B: количество строк перед совпадением, и -C: количество строк вокруг совпадения.

Опция —colour

Выделяет найденные строки цветом. Значения КОГДА могут быть: never (никогда), always (всегда), или auto. Пример:

 grep -o 'английскими' --color grep-ru.txt
 английскими

Опция -D ДЕЙСТВИЕ

—devices=ДЕЙСТВИЕ

Если исследуемый файл является файлом устройства, FIFO (именованным каналом) или сокетом, то следует применять эту опцию. ДЕЙСТВИЙ всего два: read (прочесть), и skip (пропустить). Если вы указываете ДЕЙСТВИЕ read (используется по умолчанию), то программа попытается прочесть специальный файл, как если бы он был обычным файлом; если указываете ДЕЙСТВИЕ skip, то файлы устройств, FIFO и сокеты будут молча проигнорированы.

Опция -d ДЕЙСТВИЕ

—directories=ДЕЙСТВИЕ

Если входной файл является директорией, то используйте эту опцию. ДЕЙСТВИЕ read (прочесть) попытается прочесть директорию как обычный файл (некоторые ОС и файловые системы запрещают это; тогда появятся соответствующие сообщения, либо директории молча пропустят). Если ДЕЙСТВИЕ skip (пропустить), то директории будут молча проигнорированы. Если ДЕЙСТВИЕ recurse (рекурсивно), то grep будет просматривать все файлы и субдиректории внутри заданного каталога рекурсивно. Это эквивалент опции -r, с которой мы уже познакомились.

—with-filename

Выдает имя файла для каждого совпадения с ОБРАЗЦОМ. Мы успешно делали это без всяких опций в Хитрости второй.

—no-filename

Подавляет вывод имен файлов, когда задано несколько файлов для исследования.

Опция -I

Обрабатывает бинарные файлы как не содержащие совпадений с ОБРАЗЦОМ; эквивалент опции —binary-files=without-match.

Опция —include=ОБРАЗЕЦ_имени_файла

При рекурсивном исследовании директорий обследовать только файлы, содержащие в своем имени ОБРАЗЕЦ_имени_файла.

Опция -m ЧИСЛО_СТРОК

—max-count=ЧИСЛО_СТРОК

Прекратить обработку файла после того, как количество совпадений с ОБРАЗЦОМ достигнет ЧИСЛА_СТРОК:

 grep -m 2 'kot' kot.txt
 kot
 kotoroe

Опция -y

Синоним опции -i (не различать верхний и нижний регистр символов).

Опции -U и -u применяются только под MS-DOS и MS-Windows, тут нечего о них говорить.

Опция —mmap

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

Опция -Z

—null

Если в выводе программы имена файлов (например при опции -l), то опция -Z после каждого имени файла выводит нулевой байт вместо символа новой строки (как обычно происходит). Это делает вывод однозначным, даже если имена файлов содержат символы новой строки. Эта опция может быть использована совместно с такими командами как: find -print0, perl -0, sort -z, xargs -0 для обработки файловых имен, составленных необычно, даже содержащих символы новой строки.
(Хотел бы я знать, как можно включить символ новой строки в имя файла. Если кто знает, не поленитесь — сообщите мне.)

Опция -z

—null-data

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

Выражения в квадратных скобках и Классы символов

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

grep -h 'zip' dirlist*.txt
bzip2
bzip2recover
gzip

мы найдём любые строчки, содержащие строки «bzip» или «gzip».

Набор может содержать любое количество символов, а метасимволы теряют своё специальное значение, когда помещаются внутрь квадратных скобок. Тем не менее, есть два случая в которых метасимволы, используемые внутри квадратных скобок, имеют различные значения. Первый – это каретка (^), которая используется для указания отрицания; второй – это тире (-), которое используется для указания диапазона символов.

Отрицание

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

grep -h 'zip' dirlist*.txt
bunzip2
gunzip
funzip
gpg-zip
mzip
p7zip
preunzip
prezip
prezip-bin
unzip
unzipsfx

С активированным отрицанием, мы получили список файлов, которые содержат строку «zip», перед которой идёт любой символ, кроме «b» или «g»

Обратите внимание, что zip не был найден. Отрицаемый набор символов всё равно требует символ на заданной позиции, но символ не должен быть членом инвертированного набора.

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

Традиционные диапазоны символов

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

grep -h '^' dirlist*.txt
MAKEDEV
GET
HEAD
POST
VBoxClient
X
X11
Xorg
ModemManager
NetworkManager
VBoxControl
VBoxService

Суть в том, что мы разместили все 26 заглавных букв в выражение внутри квадратных скобок. Но мысль печатать их все не вызывает энтузиазма, поэтому есть другой путь:

grep -h '^' dirlist*.txt

Используя трёхсимвольный диапазон, мы можем сократить запись из 26 букв. Таким способом можно выразить любой диапазон символов, включая сразу несколько диапазонов, такие, как это выражение, которое соответствует всем именам файлов, начинающихся с букв и цифр:

grep -h '^' dirlist*.txt

В диапазонах символов мы видим, что символ чёрточки трактуется особым образом, поэтому как мы можем включить символ тире в выражение внутри квадратных скобок? Сделав его первым символом в выражении. Рассмотрим два примера:

grep -h '' dirlist*.txt

Это будет соответствовать каждому имени файла, содержащему заглавную букву. При этом:

grep -h '' dirlist*.txt

будет соответствовать каждому имени файла, содержащему тире, или заглавную «A», или заглавную «Z».

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

Подробнее о POSIX вы можете почитать в Википедии.

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

Класс символов Описание
Алфавитно-цифровые символы. В ASCII эквивалентно:
То же самое, что и , с дополнительным символом подчёркивания (_).
Алфавитные символы. В ASCII эквивалентно:
Включает символы пробела и табуляции.
Управляющие коды ASCII. Включает ASCII символы с 0 до 31 и 127.
Цифры от нуля до девяти.
Видимые символы. В ASCII сюда включены символы с 33 по 126.
Буквы в нижнем регистре.
Символы пунктуации. В ASCII эквивалентно: [-!»#$%&'()*+,./:;?@_`{|}~]
Печатные символы. Все символы в плюс символ пробела.
Символы белых пробелов, включающих пробел, табуляцию, возврат каретки, новую строку, вертикальную табуляцию и разрыв страницы. В ASCII эквивалентно:
Символы в верхнем регистре.
Символы, используемые для выражения шестнадцатеричных чисел. В ASCII эквивалетно:

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

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

может соответствовать не , а .

Examples

The previous sections contained code samples that were tailored
to illustrate a point. These are examples of practical problems I
have solved using regular expression matching. Note that these
examples are not meant to be perfect solutions — making outrageous
assumptions and imposing draconic restrictions on the input is a
great way to get stuff done quicker.

Match strings which are not empty and do not
contain slashes

Ensure that the argument (
dir_name) is not empty and contains
neither slashes nor dots:

if ! +$ && "${dir_name}" =~
^+$ ]]; then
  echo 'Invalid argument: '"${dir_name}"
fi

# dir_name="abc": OK
# dir_name="abc/def": KO
# dir_name="abc.def": KO

Extract the base filename

Assuming the filename is preceded by at least one slash, and
that there is an extension, extract the base filename:

if [[ "abc/def/test.html" =~ .*/(.+)\..* ]]; then
  echo "${BASH_REMATCH}"
fi

# outputs "test"

Extract the top directory

Given a path, extract the top directory:

if [[ "${path}" =~ ^/?(+)/? ]]; then
  echo "${BASH_REMATCH}"
fi

# the above outputs "abc" for the following inputs:
# path="abc/def/test.html"
# path="/abc/def/test.html"
# path="abc"
# path="/abc"
# path="abc/"
# path="/abc/"

A simpler, but less robust expression would be
(+), which gets all the above cases
right, but fails on paths like
//abc- which is, of course, only invalid
if it is a
— in xpath, this is perfectly legal.

Filename must have an .html
extension

Check that a filename has an
.html extension:

if ! +\.html$ ]]; then
  echo -e "\n\"${filename}\": must have .html extension" >&2
  exit 42
fi

# filename="abc.html": OK
# filename="abc": KO

The expression matches «a non-empty sequence of anything that is
not a dot», followed by «.html», followed by the end of the
string.

Extract the value of an XML element
attribute

Extract the value of an XML attribute:

line='<something att1="value1" />'
if *)\" ]]; then
  echo "${BASH_REMATCH}"
fi

This example does not handle attributes using single quotes.

Символ «звёздочка»

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

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

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

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

В этом примере одно и то же регулярное выражение реагирует и на слово «color», и на слово «colour». Это так благодаря тому, что символ «u», после которого стоит звёздочка, может либо отсутствовать, либо встречаться несколько раз подряд.

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

Шаблон, реагирующий на любое количество любых символов

В данном случае неважно сколько и каких символов находится между словами «this» и «test». Звёздочку можно использовать и с классами символов:

Звёздочку можно использовать и с классами символов:

Использование звёздочки с классами символов

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

Группировка фрагментов регулярных выражений

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

Группировка фрагментов регулярных выражений

В данных примерах слово «Geeks» заключено в круглые скобки, после этой конструкции идёт знак вопроса. Напомним, что вопросительный знак означает «0 или 1 повторение», в результате регулярное выражение отреагирует и на строку «Like», и на строку «LikeGeeks».

Специальные символы

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

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

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

Знак доллара можно обнаружить с помощью такого шаблона:

Использование в шаблоне специального символа

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

Экранирование обратного слэша

Хотя прямой слэш и не входит в приведённый выше список специальных символов, попытка воспользоваться им в регулярном выражении, написанном для sed или awk, приведёт к ошибке:

Неправильное использование прямого слэша в шаблоне

Если он нужен, его тоже надо экранировать:

Экранирование прямого слэша

Практические примеры

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

▍Подсчёт количества файлов

Напишем bash-скрипт, который подсчитывает файлы, находящиеся в директориях, которые записаны в переменную окружения 
PATH. Для того, чтобы это сделать, понадобится, для начала, сформировать список путей к директориям. Сделаем это с помощью sed, заменив двоеточия на пробелы:

$ echo $PATH | sed ‘s/:/ /g’

1 $echo$PATH|sed’s/:/ /g’

Команда замены поддерживает регулярные выражения в качестве шаблонов для поиска текста. В данном случае всё предельно просто, ищем мы символ двоеточия, но никто не мешает использовать здесь и что-нибудь другое — всё зависит от конкретной задачи.Теперь надо пройтись по полученному списку в цикле и выполнить там необходимые для подсчёта количества файлов действия. Общая схема скрипта будет такой:

mypath=$(echo $PATH | sed ‘s/:/ /g’)
for directory in $mypath

do

done

1
2
3
4
5
6

mypath=$(echo$PATH|sed’s/:/ /g’)

fordirectory in$mypath

do

done

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

#!/bin/bash
mypath=$(echo $PATH | sed ‘s/:/ /g’)
count=0
for directory in $mypath
do
check=$(ls $directory)
for item in $check
do
count=$
done
echo «$directory — $count»
count=0
done

1
2
3
4
5
6
7
8
9
10
11
12
13

#!/bin/bash

mypath=$(echo$PATH|sed’s/:/ /g’)

count=

fordirectory in$mypath

do

check=$(ls$directory)

foritem in$check

do

count=$$count+1

done

echo»$directory — $count»

count=

done

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

Подсчёт файлов

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

▍Проверка адресов электронной почты

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

[email protected]

1 [email protected]

Имя пользователя, 
username, может состоять из алфавитно-цифровых и некоторых других символов. А именно, это точка, тире, символ подчёркивания, знак «плюс». За именем пользователя следует знак @.

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

^(+)@

1 ^(a-zA-Z0-9_\-\.\++)@

Это регулярное выражение можно прочитать так: «В начале строки должен быть как минимум один символ из тех, которые имеются в группе, заданной в квадратных скобках, а после этого должен идти знак @».

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

(+)

1 (a-zA-Z0-9_\-\.+)

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

\.({2,5})$

1 \.(a-zA-Z{2,5})$

Прочесть его можно так: «Сначала должна быть точка, потом — от 2 до 5 алфавитных символов, а после этого строка заканчивается».

Подготовив шаблоны для отдельных частей регулярного выражения, соберём их вместе:

^(+)@(+)\.({2,5})$

1 ^(a-zA-Z0-9_\-\.\++)@(a-zA-Z0-9_\-\.+)\.(a-zA-Z{2,5})$

Теперь осталось лишь протестировать то, что получилось:

$ echo «[email protected]» | awk ‘/^(+)@(+)\.({2,5})$/{print $0}’
$ echo «[email protected]» | awk ‘/^(+)@(+)\.({2,5})$/{print $0}’

1
2

$echo»[email protected]»|awk’/^(+)@(+)\.({2,5})$/{print $0}’

$echo»[email protected]»|awk’/^(+)@(+)\.({2,5})$/{print $0}’

Проверка адреса электронной почты с помощью регулярных выражений

То, что переданный awk текст выводится на экран, означает, что система распознала в нём адрес электронной почты.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: