Регулярное выражение — очень полезный инструмент для сопоставления любого содержимого или поиска и замены содержимого файла или строки с использованием шаблона регулярного выражения. Его можно использовать со сценарием 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 | Он используется для поиска символа табуляции. |
В этой части статьи показаны различные способы поиска конкретной строки в тексте с использованием оператора =~ и шаблона регулярного выражения.
Создайте файл Bash со следующим сценарием, который принимает значение основной строки, в котором выполняется поиск строки, и значение строки поиска ищется в значении основной строки. Затем оператор «=~» используется со строкой поиска, чтобы проверить, существует ли строка поиска в основной строке или нет. Здесь символ «*» используется для обозначения любого количества символов.
#!/bin/bash #Возьмем основную строку read -p "Введите основное строковое значение: " strValue #Введите строку поиска read -p "Введите значение в строке поиска: " search #Проверьте, существует ли строка поиска в основной строке или нет if [[ $strValue =~ .*$search.* ]]; then echo "Строка существует в тексте." else echo "Строка не существует в тексте." fi
andreyex@andreyex:-$ bash regex1.bash Введите основное строковое значение: Learn regular expression Введите значение в строке поиска: regular Строка существует в тексте. andreyex@andreyex: -$
Создайте файл Bash со следующим сценарием, который берет имя файла из аргумента командной строки и проверяет, является ли файл файлом Bash или нет.
#!/bin/bash #Возьмите имя файла из аргумента filename=$1 #Определите значение расширения для поиска extension='bash' #Проверьте, совпадает ли расширение с расширением файла или нет if [[ "$filename" =~ \.$extension$ ]]; then echo "$filename это файл bash." else echo "$filename это не файл bash." fi
Следующий вывод появляется для имени файла «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:-$
Создайте файл 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: $
Создайте файл 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: ~$
Следующий вывод появляется после выполнения сценария с недопустимым входным значением «880-12345-67890»:
andreyex@andreyex:-$ bash regex4.bash Введите номер мобильного телефона [880-XXXX-XXXXXX]: 880- 12345-67890 Номер мобильного телефона недействителен. andreyex@andreyex:~$
В этой статье показаны методы использования оператора «=~» для поиска строковых значений с различными типами регулярных выражений.