Procmail是否具有小写功能或类似功能?
问题描述:
我使用以下(经典)的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'或 - 我之后 - 只是“拼装”。
答
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处理结合使用,但为了清晰起见,我将其留在此处。
答
AFAIK procmail正则表达式总是不区分大小写,所以你已经得到你想要的东西而不做任何特殊的事情。至少我总是这样使用它,并且所有使用procmail文档的站点(我也检查过)(3+)也这么说。
似乎并非如此,因为正在创建具有'Listname'和'listname'的文件夹。 – phillipadsmith 2011-05-13 20:08:02
有趣的是,在这种情况下,我会给你的问题一个upvote ... :) – 2011-05-13 20:09:06
好吧,没有消息,但只是说,虽然匹配本身(很可能)确实不区分大小写,但你的问题在于匹配。尝试7.21在http://pm-doc.sourceforge.net/doc/#converting_value_to_lowercase – 2011-05-13 21:32:41