我正在使用以下(经典)procmail配方来捕获邮件列表电子邮件,并按列表名称将它们归档到文件夹中:
:0
* ^((List-Id|X-(Mailing-)?List):(.*[<]\/[^>]*))
{
LISTID=$MATCH
:0
* LISTID ?? ^\/[^@\.]*
Lists/$MATCH/
}
问题是:如果列表名称从全部小写改为Firstlettercap,我最终会得到两个文件夹,一个用于'listname',另一个用于'Listname'。
我想在最终交付规则中使用它之前将$ MATCH变量小写,但是我无法找到对lc()函数的引用,或者可以用于执行的正则表达式/替换这个。
以下一条评论建议:
:0
* ^((List-Id|X-(Mailing-)?List):(.*[<]\/[^>]*))
{
LISTID=`echo "$MATCH" | tr A-Z a-z`
:0
* LISTID ?? ^\/[^@\.]*
.Lists.$MATCH/
}
这似乎也不像我追求的那样。虽然,现在看一下,很明显,音译只发生在第一次出现的$ MATCH上,我的猜测是它根本没有改变它在文件夹分配行中的使用。
更新#1:如果我尝试在文件夹分配行中使用LISTID,我会得到类似'Bricolage.project.29601.lighthouseapp'而不仅仅是'Bricolage'或者 - 我正在追求的东西 - 只是'拼装”。
答案 0 :(得分:1)
Procmail本身没有用其他文本替换文本的功能。您可以通过tr
运行匹配,或者如果避免外部进程非常重要,请为您需要映射的每个字母创建一个规则。
LISTID=`echo "$LISTID" | tr A-Z a-z`
# or alternatively
:0D
* LISTID ?? ^A\/.*
{ LISTID="a$MATCH" }
:0D
* LISTID ?? ^B\/.*
{ LISTID="b$MATCH" }
# ... etc
您可以将其与最终的MATCH处理相结合,但为了清楚起见,我将其留在此处。
答案 1 :(得分:0)
AFAIK procmail正则表达式总是不感兴趣,所以你已经得到了你想要的东西而没有做任何特别的事情。至少我总是这样使用它,所有我检查过的procmail文档的站点(3+)都是这样说的。