Как заменить символ на другой в переменной

Я хочу знать, есть ли способ заменить символ другим в переменной. Например, замена каждой точки символом подчеркивания в строковой переменной.


person madjack    schedule 22.08.2017    source источник
comment
Какой язык вы используете? Это поможет.   -  person clabe45    schedule 22.08.2017
comment
Сито - это название языка   -  person madjack    schedule 22.08.2017
comment
Если вы ищете способ хранения электронной почты в папках по адресу получателя или что-то в этом роде, возможно, вам на самом деле нужна не общая функция замены символов, а какой-то способ создания почтовых ящиков с точками в их именах. В случае с голубятней, кажется, есть решение: [Dovecot] . (точка) в именах папок maildir   -  person Stéphane Gourichon    schedule 24.09.2018
comment
@StéphaneGourichon Ваше предположение верно, по крайней мере, для меня. Я безуспешно пытался использовать Listescape :-/   -  person BluE    schedule 06.06.2021


Ответы (2)


Я не пробовал, но на основе спецификации переменных я бы попробовал чтобы подойти к этому, нужно попытаться сопоставить текст до и после точки, а затем создать новые переменные на основе совпадений. Что-то типа:

set "value" "abc.def";
if string :matches "${value}" "*.*" {
    set "newvalue" "${1}_${2}
}

Это, конечно, будет соответствовать только одному периоду, потому что Sieve не содержит циклических структур. Хотя существует параметр соответствия регулярному выражению, я не знаю любых расширений Sieve для замены регулярных выражений.

Другой подход к сложной фильтрации почты, который вы можете реализовать с помощью Dovecot (если вам нужны циклы и у вас есть полный доступ к почтовому серверу), — это их расширения, специфичные для Dovecot, такие как vnd.dovecot.pipe, которые позволяют почтовому администратору определять полные программы (написанные на любом желаемом языке) для обработки почты в пути.

person Community    schedule 23.08.2017

Следуя комментарию @BluE, если ваш вариант использования заключается в хранении электронных писем в папках на адрес получателя или что-то в этом роде, возможно, вам на самом деле нужна не общая функция замены символов, а какой-то способ создания почтовых ящиков с точками в их именах. В случае с dovecot похоже есть решение: [Dovecot] . (точка) в именах папок maildir

https://wiki2.dovecot.org/Plugins/Listescape

Убедитесь, что один из файлов в /etc/dovecot/conf.d содержит эту строку:

mail_plugins = listescape

Затем вы можете фильтровать списки рассылки в отдельные ящики на основе их идентификаторов.

Этот фрагмент скрипта Sieve выбирает идентификатор из заголовка x-list-id:

if exists "x-list-id" {
    if header :regex "x-list-id" "<([\.@a-z_0-9-]+)" {
        set :lower "listname" "${1}";
        fileinto :create "mailing_list\\${listname}";
    } else {
        keep;
    }
    stop;
}
person Community    schedule 07.06.2021