2011-05-13 72 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

相關問題