Um die in einer E-Mail eingebetteten PDF-Inhalte mit grep zu durchsuchen, stehen Sie vor mindestens einer, wenn nicht sogar zwei Herausforderungen.
Die erste ist, dass in eine E-Mail eingebettete Dateien nicht in ihrer Rohform erhalten bleiben und stattdessen für die Übertragung in der E-Mail-Nachricht in Klartext codiert werden. Das häufig verwendete MIME-Format ist Base64, dies ist jedoch nicht immer der Fall. Weitere Details zu base64, einschließlich der Codierungs- / Decodierungsmethoden, finden Sie hier: http://en.wikipedia.org/wiki/Base64
Angenommen, der Anhang wurde in base64 codiert, ist es immer noch nicht so einfach, die Suchzeichenfolge in eine Base64-Darstellung zu übernehmen, da die resultierende Codierung davon abhängt, wo in der Eingabezeichenfolge Ihre Zielzeichenfolge angezeigt wird. base64 nimmt alle 6 Bits des Eingabestroms und verwandelt ihn in ein Nur-Text-Zeichen. Wenn das PDF-Dokument eine einfache 8-Bit-Codierung für die Zeichenfolge verwendet, werden aus 3 Zeichen in der PDF-Datei 4 codierte Zeichen. Eine kurze Illustration, wie die Position des Charakters die Dinge verändern kann:
% echo "123456789" | base64
MTIzNDU2Nzg5Cg==
% echo "0123456789" | base64
MDEyMzQ1Njc4OQo=
Im ersten Beispiel 123
, 456
, und 789
einbiegen in MTIz
. NDU2
und Nzg5
beziehungsweise. In der zweiten sind die codierten Tupel 012
= & gt; MDEy
. 345
= & gt; MzQ1
, ... usw.
Ihr Suchbegriff könnte am Anfang, in der Mitte oder am Ende eines dieser Tupel beginnen. Wenn Sie nach einer Zeichenfolge suchen, die lang genug ist, können Sie 3 suchbare Zeichenfolgen aus der Mitte herausarbeiten. Jede Zeichenfolge muss ein Vielfaches von 3 Zeichen lang sein. Zum Beispiel, wenn ich nach der Zeichenfolge suchen wollte 123456789
Ich könnte base64 drei mögliche Suchkandidaten kodieren: 123456789
, 234567
und 345678
. Eine der Basiscodierungen sollte in der codierten PDF-Datei angezeigt werden, wenn es sich um eine reine Textzeichenfolge handelt 123456789
ist anwesend.
Nun kommen wir zum zweiten großen Problem. Dadurch haben wir angenommen, dass der nicht kodierte Inhalt der PDF-Datei in UTF-8 (Nur-Text-Kodierung) vorliegt. Wenn Sie sich den Inhalt einer tatsächlichen PDF-Datei ansehen, werden Sie feststellen, dass sie alle möglichen internen Kodierungen enthält, darunter Schriftzeichen, Text, der in UTF-16 oder UTF-32 kodiert ist usw. Es ist sehr wahrscheinlich, dass Ihre einfache Suchphrase nicht genau so in den PDF-Daten erscheint, wie Sie es erwarten. In der PDF-Datei kann zusätzlicher Inhalt zwischen Zeichen und Wörtern vorhanden sein. Außerdem gibt es Zeilenumbrüche. Wenn Sie also nach einem Satz suchen, der einen Zeilenumbruch durchbricht, ist die Erstellung Ihrer Zielsuchzeichenfolge komplizierter.
Es gibt noch ein paar andere Dinge, die Sie ausprobieren können, damit nicht alles verloren geht.
Wenn Sie den Namen der PDF kennen, können Sie stattdessen danach suchen. Der Dateiname sollte in UTF-8 im MIME-Text der E-Mail-Nachricht erscheinen und kann daher durchsucht werden.
Sie könnten auch Glück haben und anstatt die E-Mails zu durchsuchen, nach PDF-Dateien suchen. OSX Mail extrahiert Anhänge und speichert sie in einem E-Mail-Download-Verzeichnis. Ich verwende Mavericks and Mail v7.3 und meine Anhänge werden in die Unterverzeichnisse unter ~ / Library / Containers / com.apple.mail geschrieben
Übrigens sucht Ihr grep-Befehl nach einer exakten Übereinstimmung. Wenn Sie sich nicht sicher sind, ob Sie Groß- / Kleinschreibung verwenden, sollten Sie die Option '-i' für eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung hinzufügen.