Verfügen Procmail-Rezepte über einen alternierenden „oder“-Operator?

Verfügen Procmail-Rezepte über einen alternierenden „oder“-Operator?

Gegeben sei das folgende Procmail-Rezept:

:0:
* ^Subject:.*viagra.*
* ^From:.*viagra.*
/dev/null

Procmail löscht nur E-Mails, die sowohl von Viagra stammen als auch Viagra im Betreff haben. Ist es möglich, den Filter anzuwenden, wenn eine der Übereinstimmungen zutrifft?

Die Lösung sollte vorzugsweise nicht auf die Verwendung regulärer Ausdrücke zurückgreifen (regex1|regex2). Wenn dies jedoch die einzige Lösung ist, teilen Sie dies bitte mit.

Antwort1

Sie sind nah dran. Ein gutes Verständnis von Regex ist ein wichtiger Schritt auf dem Weg zu erfolgreichen Procmail-Rezepten. Procmail ist extrem flexibel, aber diese Flexibilität hängt größtenteils von Regex ab.

:0: 
* ^(From|Cc|To|Subject).*viagara.* 
/dev/null

Alternativ können Sie, und ich glaube, das kommt Ihrem Ziel näher, ein Pipe-Zeichen und ein Zeilenumbruch-Escape verwenden, um die Regel in der nächsten Zeile fortzusetzen (zur besseren Lesbarkeit). In Ihrem Beispiel haben Sie eine neue Bedingung erstellt, die ebenfalls erfüllt werden musste.

:0:
* ^Subject:.*viagra.* |\
  ^From:.*viagra.*
/dev/null

Antwort2

Verwenden Sie einfach zwei Rezepte, die jeweils zu /dev/null führen, eines mit Übereinstimmung mit Betreff, das andere mit Übereinstimmung mit Von. Die erste Übereinstimmung gewinnt. Dies ist im Wesentlichen dasselbe wie ein ODER-Operator. Der reg1|reg2-Ansatz würde funktionieren, aber ich denke, er liest sich klarer wie zwei Rezepte.

verwandte Informationen