2011-05-13 131 views
2

我使用以下(经典)的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'或 - 我之后 - 只是“拼装”。

回答

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处理结合使用,但为了清晰起见,我将其留在此处。

0

AFAIK procmail正则表达式总是不区分大小写,所以你已经得到你想要的东西而不做任何特殊的事情。至少我总是这样使用它,并且所有使用procmail文档的站点(我也检查过)(3+)也这么说。

+0

似乎并非如此,因为正在创建具有'Listname'和'listname'的文件夹。 – phillipadsmith 2011-05-13 20:08:02

+0

有趣的是,在这种情况下,我会给你的问题一个upvote ... :) – 2011-05-13 20:09:06

+0

好吧,没有消息,但只是说,虽然匹配本身(很可能)确实不区分大小写,但你的问题在于匹配。尝试7.21在http://pm-doc.sourceforge.net/doc/#converting_value_to_lowercase – 2011-05-13 21:32:41

相关问题