Procmail是否具有小写功能或类似功能?

时间:2011-05-13 19:45:00

标签: procmail

我正在使用以下(经典)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'或者 - 我正在追求的东西 - 只是'拼装”。

2 个答案:

答案 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+)都是这样说的。