bash + сопоставление регулярных выражений для обоих разных имен хостов

POP3 не идеально подходит для такого использования, IMAP был бы намного лучше. Однако,если ваш POP3-сервер поддерживает необходимые команды, Mutt можно настроить так, чтобы почта оставалась на сервере и загружались только новые сообщения:

unset pop_delete

скажет Матту хранить сообщения на сервере, а

set pop_last

сообщит Mutt, что нужно использовать команду LASTPOP3 для получения только непрочитанных сообщений с сервера. (См. RFC 1460 для получения подробной информации о команде LAST, которая была признана сложной для правильной реализации и была удалена из последующих RFC POP3.)

2
24.12.2020, 03:36
2 ответа

[mng] не соответствует mng, он соответствует либо m, либо n, либо g. Подходящим регулярным выражением является (^|^mng)kafka[[:digit:]]+$. Это соответствует

  • (^|^mng)нулевая строка или mngв начале строки,
  • kafka,
  • [[:digit:]]+$одна или несколько цифр, привязанных к концу строки.

Обратите внимание, что ваше предыдущее регулярное выражение также вызывало ложное срабатывание для kafka7uтак как он не был закреплен.

Тест:

arr=(kafka01 kafka7u mngkafka01 gkafka7x)
for i in "${arr[@]}"; do
    if [[ $i =~ (^|^mng)kafka[[:digit:]]+$ ]]; then
        echo "$i"
    fi
done

Выход:

kafka01
mngkafka01

Дополнительная информация:Условные конструкции(см. [[...]]раздел ).

Исправлена ​​версия вашей первоначальной попытки:

if [[ $(hostname -s) =~ (^|^mng)kafka[[:digit:]]+$ ]]
then
    /tmp/run.sh
fi
7
18.03.2021, 22:53

Квазимодо уже дал вам ответ, почему ваше регулярное выражение не работает. Я предложу другой подход. Вместо регулярных выражений используйте caseи подстановочные знаки :

.
case $(hostname -s) in
  kafka[0-9]*|mngkafka[0-9]*)
    /tmp/run.sh
esac

Это гораздо проще распространить на большее количество шаблонов, и лично мне легче читать.

9
18.03.2021, 22:53

Теги

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