【问题标题】:Does Procmail have a lowercase function, or a similar capability?Procmail 是否具有小写功能或类似功能?
【发布时间】:2011-05-13 19:44:59
【问题描述】:

我正在使用以下(经典)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


    【解决方案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 处理结合起来,但为了清楚起见,我将其保留在此处。

    【讨论】:

      【解决方案2】:

      AFAIK procmail 正则表达式始终不区分大小写,因此您无需执行任何特殊操作即可获得所需内容。至少我一直都是这样使用的,而且我检查过的所有带有 procmail 文档的网站(3+)也都这么说。

      【讨论】:

      • 似乎不是这样,因为正在创建带有“Listname”和“listname”的文件夹。
      • 有趣,在这种情况下,我会给你的 QUESTION 一个赞成票...... :)
      • 好的,没有消息,但只是说看起来虽然匹配本身(很可能)确实不区分大小写,但您的问题在于匹配之后。在 pm-doc.sourceforge.net/doc/#converting_value_to_lowercase 尝试 7.21
      • 令人沮丧的是,没有运气。我已将配方更新为:gist.github.com/59887ed6dbd3103082fc ... 然而,这是日志:gist.github.com/886ebbca32110f39b485 您会注意到列表名称 - Bricolage - 仍然是首字母封顶。 :(
      • 匹配确实不区分大小写,但这一事实在这里无关紧要。操作系统和文件系统区分大小写,因此它们关心您正在操作的文件名的大小写(显然,OSX 默认文件系统除外)。 List 在用作文件名时与 LISTlist 不同,与 Procmail 无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多