2

私は次の (従来の) procmail レシピを使用して、メーリング リストの電子メールをキャッチし、リスト名でフォルダーにファイルします。

:0
* ^((List-Id|X-(Mailing-)?List):(.*[<]\/[^>]*))
{
    LISTID=$MATCH
    :0
    * LISTID ?? ^\/[^@\.]* 
    Lists/$MATCH/
}

問題は、リスト名がすべて小文字から Firstlettercap に変更された場合、'listname' 用と 'Listname' 用の 2 つのフォルダーができてしまうことです。

$MATCH 変数を最終配信ルールで使用する前に小文字に変換したいのですが、lc() 関数への参照、またはこれを行うために使用できる正規表現/置換が見つかりません。

以下の1つのコメントはこれを示唆しました:

:0
 * ^((List-Id|X-(Mailing-)?List):(.*[<]\/[^>]*))
 {
    LISTID=`echo "$MATCH" | tr A-Z a-z`
    :0
    * LISTID ?? ^\/[^@\.]*
    .Lists.$MATCH/
 }

これも、私が求めていることをしていないようです。ただし、今見てみると、音訳は $MATCH が最初に出現したときにのみ行われていることが明らかであり、フォルダー割り当て行で使用するためにまったく変更されていないと思います。

更新 #1: フォルダー割り当て行で LISTID を使用しようとすると、「Bricolage」だけでなく、「Bricolage.project.29601.lighthouseapp」のようなものが表示されます。つまり、「bricolage」だけです。

4

2 に答える 2

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 処理と組み合わせることができますが、わかりやすくするためにそのままにしておきます。

于 2011-08-06T22:48:48.853 に答える
0

私の知る限り、procmail の正規表現は常に大文字と小文字が区別されないため、特別なことをしなくても、必要なものを取得できます。少なくとも私は常にそのように使用しており、私がチェックした procmail ドキュメント (3+) のあるすべてのサイトでもそうでした。

于 2011-05-13T19:56:52.210 に答える