W: Дублирующаяся запись в sources.list http://....
У вас дублируется запись в
source.list
Вручную :
Отредактируйте
sources.list
, закомментируйте или удалите дублирующуюся запись.Через GUI :
Установите Y PPA Manager
sudo add-apt-repository ppa:webupd8team/y-ppa-manager sudo apt-get update sudo apt-get install y-ppa-manager
Затем выберите сканирование и удаление дубликатов PPA из дополнительных опций Y PPA Manager
~
фактически является частью оператора = ~
, который выполняет сопоставление строки с регулярным выражением слева от расширенного регулярного выражения справа.
[[ "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
Вам следует прочитать страницы руководства bash в разделе [[выражение]]
.
Доступен дополнительный бинарный оператор = ~ с тем же приоритетом, что и == и! =.Когда он используется, строка справа от оператора считается расширенным регулярным выражением и соответствующим образом сопоставляется (как в regex (3)).
Короче говоря, = ~
- это оператор, как и ==
и ! =
. Это не имеет ничего общего с фактическим регулярным выражением в строке справа.