2009-08-25 9 views
0

Ich benutze procmail, um umfangreiche Sortierung in meinem Posteingang zu machen. Mein vorletztes Rezept entspricht der eingehenden From: zu einer (sehr) langen Weiß/Gold-Liste von historisch guten E-Mail-Adressen und Mustern von E-Mail-Adressen. Das Rezept ist:Wie ermittelt man, welches Muster in einer Datei mit grep übereinstimmt?

# Anything on the goldlist goes straight to inbox 
:0 
* ? formail -zxFrom: -zxReply-To | fgrep -i -f $HOME/Mail/goldlist 
{ 
    LOG="RULE Gold: " 
    :0: 
    $DEFAULT 
}

Das endgültige Rezept legt alles, was in einem verdächtigen Ordner übrig bleibt, als wahrscheinlichen Spam zu untersuchen. Die Goldliste ist aktuell 7384 Zeilen lang (yikes ...). Hin und wieder bekomme ich ein Stück Spam, das durchgerutscht ist, und ich möchte das fehlerhafte Muster reparieren. Ich dachte, ich hätte vor einer Weile über eine spezielle Flagge in Grep gelesen, die geholfen hat, die passenden Muster zu zeigen, aber ich kann das nicht wieder finden. Gibt es eine Möglichkeit, Grep zu verwenden, das das Muster aus einer Datei anzeigt, die mit dem gescannten Text übereinstimmt? Oder ein anderes ähnliches Werkzeug, das die Frage beantworten würde, ein Skript zu schreiben, das Muster für Muster scannt?

Antwort

2

grep -o gibt nur den übereinstimmenden Text aus (im Gegensatz zur gesamten Zeile). Das kann helfen. Andernfalls denke ich, dass Sie ein Wrapper-Skript schreiben müssen, um ein Muster nach dem anderen auszuprobieren.

2

Ich bin mir nicht sicher, ob dir das hilft oder nicht. Es gibt einen "-o" -Parameter, um nur den passenden Ausdruck auszugeben.

Aus der Manpage:

-o, --only-matching 
      Show only the part of a matching line that matches PATTERN. 
Verwandte Themen