procmail在主题中找到前3个大写字母

时间:2014-04-08 10:32:19

标签: procmail

我是procmail的新手并且正在努力理解语法。

我想要做的是检查主题行,看它是否以3个大写字母开头,后跟冒号,如果是,则从结尾删除冒号并执行和操作,即:

主题:ABC:主题的其他部分

:0
* $ ^Subject:/^[A-Z]{3}:$/
| /usr/bin/zarafa-dagent -C -P 'Support\\$1' vmail

首先,我不确定我的正则表达式是否正确,其次,尽管有很多谷歌搜索我无法弄清楚如何将我的搜索保存到变量以便在其他地方使用,我尝试了$ 1作为第一个返回的变量但是这似乎不起作用。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以对$MATCH的值进行后期处理以修剪冒号。

:0 D
* ^Subject:[^   ]*\/[A-Z][A-Z][A-Z]:
{
    :0
    * MATCH ?? ^^\/[A-Z][A-Z][A-Z]
    | /usr/bin/zarafa-dagent -C -P "Support\\$MATCH" vmail
}

第一个条件将三个大写字符和冒号捕获到MATCH。第二个将此值与三个大写字符匹配,并将该部分捕获到MATCH的新值中。

像往常一样,Subject:之后括号内的空格由空格和制表符组成。

答案 1 :(得分:-1)

好的,解决了这个问题,procmail拥有它自己的正则表达式版本:

:0 D
* ^Subject:.*\/([A-Z]+[A-Z]+[A-Z]):
| /usr/bin/zarafa-dagent -C -P "Support\\$MATCH" vmail
EXITCODE=$?

它不支持迭代器括号[A-Z] {3},所以你必须重复表达式。

此外,它不区分大小写,因此您需要添加“D”标志。

问题是我似乎无法从最后删除冒号。