libssl.so.0.9.8: невозможно открыть файл общих объектов: нет такого файла или каталога

~ фактически является частью оператора = ~ , который выполняет сопоставление строки с регулярным выражением слева от расширенного регулярного выражения справа.

[[ "string" =~ pattern ]]

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

Аналогичный оператор используется в языке программирования Perl.

Регулярные выражения, понимаемые bash , такие же, как и те, которые понимает GNU grep с флагом -E , то есть расширенным набором регулярных выражений.


Скорее не по теме, но полезно знать:

При сопоставлении с регулярным выражением, содержащим группы захвата, часть строки, захваченная каждой группой, доступна в массиве BASH_REMATCH . Нулевой / первый элемент в этом массиве соответствует & в шаблоне замены команды подстановки sed (или $ & в Perl), что является бит строки, который соответствует шаблону, в то время как записи с индексом 1 и далее соответствуют \ 1 , \ 2 и т. д. в шаблоне замены sed (или $ 1 , $ 2 и т. д. в Perl), то есть биты, соответствующие каждой круглой скобке.

Пример:

string=$( date +%T )

if [[ "$string" =~ ^([0-9][0-9]):([0-9][0-9]):([0-9][0-9])$ ]]; then
  printf 'Got %s, %s and %s\n' \
    "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
fi

Может вывести

Got 09, 19 and 14

, если текущее время 09:19:14.

Бит REMATCH имени массива BASH_REMATCH происходит от «Соответствие регулярного выражения», то есть «Повторное сопоставление».


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

Небольшой пример:

$ string="hello 123 world"
$ expr "$string" : ".*[^0-9]\([0-9][0-9]*\)"
123
2
03.12.2015, 14:05
0 ответов

Теги

Похожие вопросы