Самый простой пример использования регулярных выражений в программировании – это сравнение строк. Это выглядит по-разному на разных языках, например:
Вы также можете использовать регулярное выражение для управления строками посредством подстановки. В следующих примерах будет напечатано слово «безумный мир»:
Вы можете изменить поведение регулярных выражений с помощью нескольких модификаторов. Я просто собираюсь проиллюстрировать здесь один модификатор, делающий регулярное выражение нечувствительным к регистру. В Perl, JavaScript и других более традиционных контекстах регулярных выражений модификаторы добавляются после последнего / . Вместо этого более современные языки часто используют пользовательские константы:
Они поддерживаются только в некоторых реализациях регулярных выражений и дают вам возможность сопоставлять строки, которые предшествуют другим строкам или следуют за ними, но без включения префикса или суффикса в само сопоставление:
Регулярные выражения Linux — это специальные символы, которые помогают искать данные и сопоставлять сложные шаблоны. Регулярные выражения сокращаются до «regexp» или «regex». Они используются во многих программах Linux, таких как grep, bash, rename, sed и т. д.
Для простоты понимания давайте рассмотрим различные типы регулярных выражений один за другим.
Некоторыми из часто используемых команд с регулярными выражениями являются tr, sed, vi и grep. Ниже перечислены некоторые из основных регулярных выражений.
Давайте рассмотрим пример.
Искать контент, содержащий букву «а».
‘^‘ соответствует началу строки. Давайте найдем контент, который НАЧИНАЕТСЯ с
Фильтруются только строки, начинающиеся с символа. Строки, не содержащие в начале символа «а», игнорируются.
Эти выражения говорят нам о количестве вхождений символа в строку. Они
Мы хотим проверить, что символ «p» появляется в строке ровно 2 раза один за другим. Для этого синтаксис будет следующим:
Примечание. К этим регулярным выражениям необходимо добавить -E.
Выражение | Описание |
\+ | Соответствует одному или больше вхождений предыдущего символа |
\? | Соответствует нулю или одному вхождению предыдущего символа |
таблица>
Поиск всех символов ‘t’
Предположим, мы хотим отфильтровать строки, в которых символ «a» предшествует символу «t»
Мы можем использовать такую команду
Расширение фигурной скобки
Синтаксис для раскрытия фигурных скобок представляет собой либо последовательность, либо список элементов, разделенных запятыми, внутри фигурных скобок «<>». Начальный и конечный элементы последовательности разделяются двумя точками «..».
В приведенных выше примерах команда echo создает строки, используя раскрытие фигурных скобок.
Обзор:
Выражение
Описание
Компания Acunetix, разработчик сверхточных сканеров безопасности веб-приложений, спонсировала проект Guru99, помогая точно и с максимальной скоростью сканировать более 4500 веб-уязвимостей.
В этой главе мы подробно обсудим регулярные выражения с SED в Unix.
Регулярное выражение – это строка, которую можно использовать для описания нескольких последовательностей символов. Регулярные выражения используются несколькими различными командами Unix, включая ed, sed, awk, grep и, в более ограниченной степени, vi.
Здесь SED означает потоковый редактор. Этот потоковый редактор был создан исключительно для выполнения скриптов. Таким образом, все вводимые вами данные проходят через STDOUT и не изменяют входной файл.
Вызов sed
Прежде чем мы начнем, убедитесь, что у нас есть локальная копия текстового файла /etc/passwd для работы с sed.
Как упоминалось ранее, sed можно вызвать, отправив ему данные по каналу следующим образом:
Команда cat выгружает содержимое /etc/passwd для sed через канал в пространство шаблонов sed. Пространство шаблонов — это внутренний рабочий буфер, который sed использует для своих операций.
Общий синтаксис sed
Ниже приведен общий синтаксис для sed —
Здесь шаблон — это регулярное выражение, а действие — одна из команд, приведенных в следующей таблице. Если шаблон не указан, действие выполняется для каждой строки, как мы видели выше.
Символ косой черты (/), окружающий шаблон, обязателен, поскольку он используется в качестве разделителя.
Печать строки
Удаляет строку
s/шаблон1/шаблон2/
Заменяет первое вхождение шаблона1 шаблоном2
Удаление всех строк с помощью sed
Теперь мы поймем, как удалить все строки с помощью sed. Снова вызвать sed; но sed теперь должен использовать строку удаления команды редактирования, обозначаемую одной буквой d -
Вместо вызова sed путем отправки ему файла по каналу, sed можно указать читать данные из файла, как в следующем примере.
Следующая команда делает то же самое, что и в предыдущем примере, но без команды cat —
Адреса sed
Sed также поддерживает адреса. Адреса — это либо определенные места в файле, либо диапазон, в котором должна применяться определенная команда редактирования. Когда sed не находит адресов, он выполняет свои операции с каждой строкой в файле.
Следующая команда добавляет базовый адрес к используемой вами команде sed —
Обратите внимание, что цифра 1 добавляется перед командой редактирования удаления. Это указывает sed выполнить команду редактирования в первой строке файла. В этом примере sed удалит первую строку /etc/password и напечатает остальную часть файла.
Диапазоны адресов sed
Теперь мы поймем, как работать с диапазонами адресов sed. Так что, если вы хотите удалить более одной строки из файла? Вы можете указать диапазон адресов с помощью sed следующим образом —
Вышеупомянутая команда будет применена ко всем строкам, начиная с 1 по 5. Это удалит первые пять строк.
Попробуйте следующие диапазоны адресов –
Строки с 4-й по 10-ю удаляются
Удаляется только 10-я строка, так как sed не работает в обратном направлении
Это соответствует строке 4 в файле, удаляет эту строку, продолжает удалять следующие пять строк, а затем прекращает удаление и печатает остальные
Это удаляет все, кроме строк со 2-й по 5-ю
При этом удаляется первая строка, выполняются следующие три строки, а затем удаляется четвертая строка. Sed продолжает применять этот шаблон до конца файла.
Это говорит sed удалить вторую строку, перейти через следующую строку, удалить следующую строку и повторять до тех пор, пока не будет достигнут конец файла
Выводятся строки с 4-й по 10-ю
Это приводит к синтаксической ошибке
Это также вызовет синтаксическую ошибку
Примечание. При использовании действия p следует использовать параметр -n, чтобы избежать повторения печати строки. Проверьте разницу между следующими двумя командами —
Команда замены
Команда подстановки, обозначаемая буквой s, заменит любую указанную вами строку любой другой указанной вами строкой.
Чтобы заменить одну строку другой, sed должен иметь информацию о том, где заканчивается первая строка и начинается строка подстановки. Для этого мы завершаем две строки символом косой черты (/).
Следующая команда заменяет первое вхождение в корневой строке строки строкой amrood.
Очень важно отметить, что sed заменяет только первое вхождение в строке. Если корень строки встречается в строке более одного раза, будет заменено только первое совпадение.
Чтобы sed выполнил глобальную замену, добавьте букву g в конец команды следующим образом:
Флаги замены
Существует ряд других полезных флагов, которые можно передавать в дополнение к флагу g, и вы можете указать более одного за раз.
Заменяет все совпадения, а не только первое совпадение
Заменяет только совпадение NUMBER
Если была произведена подстановка, печатает пространство шаблона
Если подстановка была произведена, то записывает результат в FILENAME
Совпадает без учета регистра
В дополнение к обычному поведению специальных символов регулярных выражений ^ и $, этот флаг заставляет ^ сопоставлять пустую строку после новой строки, а $ — с пустой строкой перед новой строкой
Использование альтернативного разделителя строк
Предположим, вам нужно заменить строку, содержащую косую черту. В этом случае вы можете указать другой разделитель, указав обозначенный символ после s.
В приведенном выше примере мы использовали : в качестве разделителя вместо косой черты /, потому что мы пытались искать /root вместо простого корня.
Замена пустым пространством
Используйте пустую строку подстановки, чтобы полностью удалить корневую строку из файла /etc/passwd —
Подмена адреса
Если вы хотите заменить строку sh на строку quiet только в строке 10, вы можете указать ее следующим образом:
Аналогично, чтобы выполнить подстановку диапазона адресов, вы можете сделать что-то вроде следующего:
Как видно из вывода, в первых пяти строках строка sh была заменена на quiet, а остальные строки остались нетронутыми.
Команда сопоставления
Вы должны использовать параметр p вместе с параметром -n, чтобы напечатать все совпадающие строки следующим образом:
Использование регулярных выражений
При сопоставлении с шаблонами вы можете использовать регулярное выражение, которое обеспечивает большую гибкость.
Проверьте следующий пример, который сопоставляет все строки, начинающиеся с daemon, а затем удаляет их –
Ниже приведен пример, в котором удаляются все строки, оканчивающиеся на sh -
В следующей таблице перечислены четыре специальных символа, очень полезных в регулярных выражениях.
Соответствует началу строк
Соответствует концу строк
Соответствует любому одиночному символу
Соответствует нулю или более вхождениям предыдущего символа
Соответствует любому из символов, заданных в chars, где chars — это последовательность символов. Вы можете использовать символ - для обозначения диапазона символов.
Соответствие символов
Посмотрите еще на несколько выражений, демонстрирующих использование метасимволов. Например, следующий шаблон —
Соответствует строкам, содержащим такие строки, как a+c, a-c, abc, match и a3c
Соответствует одинаковым строкам, а также таким строкам, как ace, yacc и arctic
Соответствует строке The и
Соответствует пустым строкам
Соответствует целой строке, какой бы она ни была
Соответствует одному или нескольким пробелам
Соответствует пустым строкам
В следующей таблице показаны некоторые часто используемые наборы символов —
Соответствует одной строчной букве
Соответствует одной заглавной букве
Соответствует одной букве
Соответствует одному числу
Соответствует одной букве или цифре
Ключевые слова класса символов
Некоторые специальные ключевые слова обычно доступны для регулярных выражений, особенно в утилитах GNU, использующих регулярные выражения. Они очень полезны для регулярных выражений sed, поскольку они упрощают работу и улучшают читаемость.
Например, символы от a до z и символы от A до Z составляют один такой класс символов, который имеет ключевое слово [[:alpha:]]
Используя ключевое слово класса символов алфавита, эта команда печатает только те строки в файле /etc/syslog.conf, которые начинаются с буквы алфавита –
В следующей таблице представлен полный список доступных ключевых слов классов символов в GNU sed.
Буквенно-цифровой [a-z A-Z 0-9]
В алфавитном порядке [a-z A-Z]
Пробелы (пробелы или табуляции)
Любые видимые символы (кроме пробелов)
Строчные буквы [a–z]
Печатные символы (неуправляющие символы)
Заглавные буквы [A-Z]
Шестнадцатеричные цифры [0–9 a–f A–F]
Ссылка на амперсанд
Метасимвол sed & представляет содержимое совпавшего шаблона. Например, предположим, что у вас есть файл с именем phone.txt, полный телефонных номеров, например следующий —
Вы хотите, чтобы код города (первые три цифры) был заключен в круглые скобки для удобства чтения. Для этого вы можете использовать символ замены амперсанда —
Здесь в части шаблона вы сопоставляете первые 3 цифры, а затем используете & и заменяете эти 3 цифры окружающими круглыми скобками.
Использование нескольких команд sed
Вы можете использовать несколько команд sed в одной команде sed следующим образом:
Здесь команда от command1 до commandN — это команды sed того типа, который обсуждался ранее. Эти команды применяются к каждой из строк в списке файлов, заданных файлами.
Используя тот же механизм, мы можем написать приведенный выше пример номера телефона следующим образом:
Примечание. В приведенном выше примере вместо трехкратного повторения ключевого слова класса символов [[:digit:]] мы заменили его на \ , что означает, что предыдущее регулярное выражение соответствует трем раза. Мы также использовали \ для разрыва строки, и его необходимо удалить перед запуском команды.
Предыдущие ссылки
Метасимвол амперсанда полезен, но еще более полезна возможность определять определенные области в регулярных выражениях. Эти специальные регионы можно использовать в качестве ссылки в замещающих строках. Определив определенные части регулярного выражения, вы можете ссылаться на эти части с помощью специального символа ссылки.
Чтобы сделать обратные ссылки, вы должны сначала определить регион, а затем вернуться к этому региону. Чтобы определить область, вы вставляете круглые скобки с обратной косой чертой вокруг каждой интересующей области. На первую область, окруженную обратной косой чертой, ссылается \1, на вторую — \2 и т. д.
Предположим, что phone.txt содержит следующий текст —
Попробуйте следующую команду —
Примечание. В приведенном выше примере каждое регулярное выражение внутри круглых скобок будет иметь обратную ссылку \1, \2 и так далее. Здесь мы использовали \ для разрыва строки. Это должно быть удалено перед запуском команды.
Регулярное выражение Linux. По сути, это последовательность символов или строка, определяющая шаблон поиска. Эти шаблоны поиска используются алгоритмами поиска строк, такими как vim, vi, sed, awk, find, grep и т. д. Это очень мощный инструмент в Linux. Мы можем использовать одно и то же регулярное выражение для идентификации или поиска сложных значений на уровне строк и столбцов. Регулярное выражение Linux также называется regexp или regex.
Синтаксис команды регулярного выражения:
Веб-разработка, языки программирования, тестирование программного обеспечения и другое
- команда поиска/чтения: мы можем использовать любую команду поиска или чтения в Linux, такую как vim, vi, sed, awk, find, grep и т. д.
- шаблон: нам нужно предоставить шаблон регулярного выражения в синтаксисе.
- имя файла: Входной файл.
Как работает команда регулярных выражений Linux?
Регулярное выражение — это не что иное, как символьное представление в алгоритме поиска. В любом алгоритме поиска нам необходимо передать эти регулярные выражения, чтобы идентифицировать сложную строку, доступную во входной строке или входных данных.
В экосистеме Linux доступно множество различных типов регулярных выражений.
Старший. Нет | Символ регулярного выражения | Описание |
1 | . | Он заменит любой символ. |
2 | /b | Он будет соответствовать пустой символ или строка на краю. |
3 | /B | Он будет соответствовать пустому символу или строке не на краю. |
4 | ^ | Он будет соответствовать строке строки. |
5 | \ | Это будет соответствовать пустой строке в конце слова. |
8 | \ | Он будет представлять специальные символы. |
9 | () | Сгруппирует регулярные выражения. |
10 | ? | Он будет соответствовать тому же или ровно одному символу. |
тело> таблица>
Примеры регулярных выражений Linux
Ниже приведены упомянутые примеры:
Регулярное выражение с символом «^».
В регулярном выражении Linux мы можем искать начало строки, связанное с символом «^». Для поиска строки нам нужно использовать любой текстовый/строковый редактор или алгоритм поиска.
Код:
cat файл.txt | группа ^t
Пояснение:
У нас есть образец каталога, в том же каталоге есть файл с именем «file.txt». В нем есть записи. Мы используем файл .txt в качестве входных данных для регулярного выражения Linux. Нам нужно идентифицировать записи, начинающиеся с символа «t».
Вывод:
Регулярное выражение с символом «$».
В регулярном выражении Linux мы можем искать окончание символа или строки, связанные с символом «$». Для поиска строки нам нужно использовать любой текстовый/строковый редактор или алгоритм поиска.
Обучение Kali Linux (3 курса, 3+ проекта) 3 онлайн-курса | 3 практических проекта | 21+ часов | Поддающийся проверке сертификат об окончании | Пожизненный доступ
4,5 (7 946 оценок)
Код:
cat файл.txt | grep $
Пояснение:
В том же каталоге есть файл с именем «file.txt». В нем мало записей. Мы используем файл .txt в качестве входных данных для регулярного выражения Linux «$». Нам нужно идентифицировать записи, оканчивающиеся на символ «e».
Вывод:
Регулярное выражение Linux — интервал.
В Linux существуют различные типы регулярных выражений. Интервал — один из них. С помощью интервального выражения мы можем найти выражение, которое соответствует количеству вхождений в строке.
Нам нужно использовать параметр «-E» со значением интервала между символами и строками.
Код:
cat файл.txt | grep -E e\
Пояснение:
В экосистеме Linux мы можем искать различные комбинации символов. В соответствии с приведенной выше командой мы можем найти ту же последовательность количества символов времени, что и заданное значение, назначенное в команде. Мы идентифицируем последовательность символов «e», встречающихся в строке два раза.
Вывод:
Регулярное выражение с символом «\+».
В регулярном выражении мы хотим отфильтровать совпадения одного или нескольких вхождений предыдущего символа из входного файла.
Код:
cat файл.txt | grep "н\+е"
Пояснение:
Мы используем входной файл как «file.txt». Нам нужно искать строку от начального символа как «n» и адъютантного символа как «e». В соответствии с приведенной выше командой мы ищем определенную комбинацию характеристик из входного файла.
Вывод:
Регулярное выражение с разделителями слов.
В регулярном выражении Linux мы можем найти точное соответствие строки во входном файле. Нам нужно использовать параметр «\b \b» с любым текстовым/строковым редактором или алгоритмом поиска.
Код:
grep '\bfive\b' файл.txt
Пояснение:
В регулярных выражениях Linux мы можем найти определенную строку или символ из входного файла/данных. В соответствии с приведенной выше командой мы указываем регулярное выражение, чтобы найти точную строку. Мы используем опцию «\b\b», в которой нам нужно сохранить строку поиска.
Вывод:
Регулярное выражение с символом «*».
В регулярных выражениях Linux мы можем найти или выполнить поиск нулевого совпадения или более раз в предыдущем символе. Нам нужно использовать опцию «*» с любым текстовым/строковым редактором или алгоритмом поиска.
Код:
grep "[AB]p*" файл.txt
Пояснение:
В соответствии с приведенной выше командой мы идентифицируем только символы верхнего регистра «A» и «B» и все символы или строки из строчной буквы «p». Соответственно, по данному входу мы можем получить соответствующую строку из входного файла.
Вывод:
Выражение с «\?» символ.
В регулярном выражении мы хотим отфильтровать совпадения нуля или более вхождений предыдущего символа из входного файла.
Код:
cat файл.txt | grep "н\?е"
Пояснение:
Мы используем входной файл как «file.txt». Нам нужно искать строку от начального символа как «n» и адъютантного символа как «e». В соответствии с приведенной выше командой мы ищем определенную комбинацию характеристик во входном файле, и она будет искать все символы, попадающие во входной файл.
Вывод:
Заключение
Мы рассмотрели неразрезанную концепцию «Команды регулярных выражений Linux» с надлежащим примером, объяснением и командой с различными выводами. Регулярное выражение — это очень мощный командный инструмент для обработки данных любого типа. Он широко используется в заданиях оболочки/bash, инструментах поиска и т. д.
Рекомендуемые статьи
Это руководство по регулярным выражениям Linux. Здесь мы обсуждаем введение в регулярные выражения Linux, а также работу команды и примеры для лучшего понимания. Вы также можете ознакомиться со следующими статьями, чтобы узнать больше –
Читайте также: