2010-03-22 17 views
18

Ich versuche, eine Reihe von Dateien in verschachtelten Unterverzeichnissen zu durchsuchen, um nach Übereinstimmungen mit regulären Ausdrücken zu suchen. Meine Regex erfordert negative Lookbehind.Was ist der einfachste Weg, um ein Äquivalent zu GNU Grep zu erhalten, das negative Lookbehinds unterstützt?

Perl hat negative Lookbehind, aber soweit ich das beurteilen kann GNU grep doesn't support negative lookbehinds.

Was ist der einfachste Weg, um ein Äquivalent zu GNU grep zu erhalten, das negative Lookbehinds unterstützt?

(Ich denke, ich könnte meinen eigenen Mini-Grep in Perl schreiben, aber das scheint nicht nötig zu sein. Meine Kopie des Perl-Kochbuchs enthält eine Quelle für tcgrep; sollte ich das verwenden? , wo ist die neueste Version? Sag mir nicht, ich muss das gesamte Programm eingeben!)

Antwort

23

Verwenden Sie ack! Ack wird in Perl geschrieben, so dass Perls Regex-Engine (standardmäßig) verwendet wird.

Der negativer Blick hinter ist ack "(?<!bad)boy" (pro Willert Kommentar)

+1

Ich dachte jemand könnte dies vorschlagen, aber ich denke nicht, dass ack negative Lookbehind verwendet. Zum Beispiel habe ich eine temporäre Datei in einem temporären Verzeichnis erstellt, das zwei Zeilen enthält: "goodboy" und "badboy" und dann das Beispiel von Perl in Kurzform verwendet: 'ack '(?

+4

Der negative Look-Behind ist ack "(?, kommen Sie mit dem = willert

+0

Seltsam. Ich habe auf mein Buch geschrieben, um meinen Fehler zu korrigieren! –

3

Dank einen Kommentar von anderen question. Ich habe festgestellt, dass negative Lookbehind experimentell in grep mit der -P/--perl-regexp Option unterstützt wird, so dass Sie immer noch nicht ein anderes Tool verwenden müssen, wenn Sie lieber grep verwenden möchten.

Übrigens ist meine bevorzugte Alternative zu grepgrin (die in Python geschrieben wird).