如何用变量中的另一个字符替换一个字符
How to replace a character by another in a variable
我想知道是否有办法将变量中的一个字符替换为另一个字符。例如,用字符串变量中的下划线替换每个点。
我没试过,但基于 Variables specification,我尝试解决这个问题的方法是尝试匹配点前后的文本,然后制作新的基于匹配的变量。类似于:
set "value" "abc.def";
if string :matches "${value}" "*.*" {
set "newvalue" "_
}
当然,这只会匹配单个句点,因为 Sieve 不包含任何循环结构。虽然有 regex match option,但我不知道有任何正则表达式替换 Sieve 扩展。
您可以使用 Dovecot 进行复杂邮件过滤的另一种方法(如果您确实需要循环并具有对邮件服务器的完全访问权限)是它们的 Dovecot-specific extensions 与 vnd.dovecot.pipe
类似,它允许邮件管理员定义完整的程序(用任何一种语言编写)来处理邮件。
根据@BluE 的评论,如果您的用例是将 e-mails 存储在每个收件人地址的文件夹中或类似的东西,也许您实际上并不需要通用字符替换功能,而是需要一些创建邮箱的方法他们的名字中带有点。对于鸽舍,似乎有一个解决方案:[Dovecot] . (dot) in maildir folder names
https://wiki2.dovecot.org/Plugins/Listescape
确保 /etc/dovecot/conf.d
中的文件之一包含此行:
mail_plugins = listescape
然后您可以根据邮件列表的 ID 将邮件列表过滤到单独的邮箱中。
此 Sieve 脚本片段从 x-list-id
header:
中选取 ID
if exists "x-list-id" {
if header :regex "x-list-id" "<([\.@a-z_0-9-]+)" {
set :lower "listname" "";
fileinto :create "mailing_list\${listname}";
} else {
keep;
}
stop;
}
我想知道是否有办法将变量中的一个字符替换为另一个字符。例如,用字符串变量中的下划线替换每个点。
我没试过,但基于 Variables specification,我尝试解决这个问题的方法是尝试匹配点前后的文本,然后制作新的基于匹配的变量。类似于:
set "value" "abc.def";
if string :matches "${value}" "*.*" {
set "newvalue" "_
}
当然,这只会匹配单个句点,因为 Sieve 不包含任何循环结构。虽然有 regex match option,但我不知道有任何正则表达式替换 Sieve 扩展。
您可以使用 Dovecot 进行复杂邮件过滤的另一种方法(如果您确实需要循环并具有对邮件服务器的完全访问权限)是它们的 Dovecot-specific extensions 与 vnd.dovecot.pipe
类似,它允许邮件管理员定义完整的程序(用任何一种语言编写)来处理邮件。
根据@BluE 的评论,如果您的用例是将 e-mails 存储在每个收件人地址的文件夹中或类似的东西,也许您实际上并不需要通用字符替换功能,而是需要一些创建邮箱的方法他们的名字中带有点。对于鸽舍,似乎有一个解决方案:[Dovecot] . (dot) in maildir folder names
https://wiki2.dovecot.org/Plugins/Listescape
确保 /etc/dovecot/conf.d
中的文件之一包含此行:
mail_plugins = listescape
然后您可以根据邮件列表的 ID 将邮件列表过滤到单独的邮箱中。
此 Sieve 脚本片段从 x-list-id
header:
if exists "x-list-id" {
if header :regex "x-list-id" "<([\.@a-z_0-9-]+)" {
set :lower "listname" "";
fileinto :create "mailing_list\${listname}";
} else {
keep;
}
stop;
}