Поиск по сайту:
Цель оправдывает средства (Н. Макиавелли).

Использование оператора =~ в Bash

24.05.2023
Bash Heredoc

Регулярное выражение — очень полезный инструмент для сопоставления любого содержимого или поиска и замены содержимого файла или строки с использованием шаблона регулярного выражения. Его можно использовать со сценарием Bash по-разному. Символ =~ используется в операторе if в Bash для поиска любой строки. Многие типы выражений могут использоваться для определения соответствующих шаблонов регулярных выражений. В этой статье объясняются некоторые часто используемые регулярные выражения и использование некоторых выражений с оператором =~.

 

Часто используемые регулярные выражения

ВыражениеЦель
.Он используется для поиска символов без новой строки (\n).
^Используется для поиска символов в начале строки.
$Используется для поиска символов в конце строки.
[0-9]Он используется для поиска любого числа в диапазоне от 0 до 9 в строке.
[A-Z]Используется для поиска любого символа из диапазона AZ в строке.
[a-z]Он используется для поиска любого символа и числа из диапазона az в строке.
[^A-Z0-9]Он используется для поиска всех символов, кроме заглавных букв и цифр в строке.
[a-zA-z0-9]Он используется для поиска любого символа и числа из диапазона az, AZ и 0-9 в строке.
\nОн используется для поиска символа новой строки.
\tОн используется для поиска символа табуляции.

Различные примеры операторов =~

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

 

Пример 1. Поиск определенной строки с использованием символа «*»

Создайте файл Bash со следующим сценарием, который принимает значение основной строки, в котором выполняется поиск строки, и значение строки поиска ищется в значении основной строки. Затем оператор «=~» используется со строкой поиска, чтобы проверить, существует ли строка поиска в основной строке или нет. Здесь символ «*» используется для обозначения любого количества символов.

#!/bin/bash

#Возьмем основную строку

read -p "Введите основное строковое значение: " strValue

#Введите строку поиска

read -p "Введите значение в строке поиска: " search

#Проверьте, существует ли строка поиска в основной строке или нет

if [[ $strValue =~ .*$search.* ]]; then

echo "Строка существует в тексте."

else

echo "Строка не существует в тексте."

fi
Следующий вывод появляется после выполнения скрипта со значением основной строки «Learn регулярное выражение» и значением строки поиска «regular». Здесь строка поиска существует в основной строке:
andreyex@andreyex:-$ bash regex1.bash
Введите основное строковое значение: Learn regular expression
Введите значение в строке поиска: regular
Строка существует в тексте. andreyex@andreyex: -$

Пример 2: проверьте расширение конкретного файла

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

#!/bin/bash

#Возьмите имя файла из аргумента

filename=$1

#Определите значение расширения для поиска

extension='bash'

#Проверьте, совпадает ли расширение с расширением файла или нет

if [[ "$filename" =~ \.$extension$ ]]; then

echo "$filename это файл bash."

else

echo "$filename это не файл bash."

fi

 

Читать  Найти и заменить в Vim/Vi

Следующий вывод появляется для имени файла «ping1.bash», который является файлом Bash:

andreyex@andreyex:-$ bash regex2.bash ping1.bash
ping1.bash это файл bash.
andreyex@andreyex:~$

 

Следующий вывод появляется для имени файла «hello.txt», которое не является файлом Bash:

andreyex@andreyex:~$ bash regex2.bash hello.txt 
hello.txt это не файл bash. 
andreyex@andreyex:-$

 

Пример 3. Поиск определенных символов в строке

Создайте файл Bash со следующим сценарием, который принимает строковое значение и выполняет поиск диапазона символов от «a» до «e» в строке.

#!/bin/bash

#Возьмем основную строку

read -p "Введите основное строковое значение: " strValue

#Проверьте, содержит ли строка какой-либо символ от a до e или нет

if [[ $strValue =~ [a-e] ]]; then

echo "Строка содержит символы от 'a' до 'e'"

else

echo "Строка не содержит ни одного символа от "a" до "e""

fi

 

После выполнения скрипта с входным значением «Destroyer» появляется следующий вывод:

andreyex@andreyex:~$ bash regex3.bash 
Введите основное строковое значение: Destroyer 
Строка не содержит ни одного символа от "a" до "e" 
andreyex@andreyex: ~$

 

После выполнения скрипта с входным значением «Hello World» появляется следующий вывод:

andreyex@andreyex:-$ bash regex3.bash 
Введите основное строковое значение: Hello World 
Строка содержит символы от 'a' до 'e' 
andreyex@andreyex: $

 

Пример 4: Проверка номера мобильного телефона

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

#Введите номер мобильного телефона в заданном формате

read -p "Введите номер мобильного телефона [880-XXXX-XXXXXX]: " mobile

#Установите шаблон для сопоставления

regexPattern='^880-[0-9]{4}-[0-9]{6}'

#Проверьте, действителен ли номер мобильного телефона или нет

if [[ $mobile =~ $regexPattern.* ]]; then

echo "Номер мобильного телефона действителен."

else

echo "Номер мобильного телефона недействителен."

fi

 

Следующий вывод появляется после выполнения сценария с допустимым входным значением «880-2222-033370»:

andreyex@andreyex:~$ bash regex4.bash
Введите номер мобильного телефона [880-XXXX-XXXXXX]: 880-2222 -033370 
Номер мобильного телефона действителен. 
andreyex@andreyex: ~$

 

Читать  Что означает $_ в Bash

Следующий вывод появляется после выполнения сценария с недопустимым входным значением «880-12345-67890»:

andreyex@andreyex:-$ bash regex4.bash 
Введите номер мобильного телефона [880-XXXX-XXXXXX]: 880- 12345-67890 
Номер мобильного телефона недействителен. 
andreyex@andreyex:~$

 

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


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

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

**ссылки nofollow

Это может быть вам интересно


Рекомендуемое
Электронные компоненты играют важную роль в современном мире, где все…

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: