2010-03-22 14 views
18

Sto provando a eseguire una serie di file in sottodirectory nidificate per cercare le corrispondenze di espressioni regolari; il mio regex richiede lookbe negativo.Qual è il modo più semplice per ottenere un equivalente a GNU grep che supporta lookbehind negativi?

Perl ha un aspetto negativo, ma per quanto posso dire GNU grep doesn't support negative lookbehinds.

Qual è il modo più semplice per ottenere un equivalente a GNU grep che supporta lookbehind negativi?

(Credo che potrei scrivere il mio mini-grep in Perl, ma non sembra che dovrebbe essere necessario.) La mia copia del libro di ricette Perl include la fonte per tcgrep; è questo che dovrei usare? , dove è l'ultima versione? Non dirmi che devo digitare questo intero programma!)

risposta

23

Utilizzare ack! Ack è scritto in Perl, quindi usa il motore regex di Perl (per impostazione predefinita).

Il look-dietro negativo è ack "(?<!bad)boy" (per il commento di Willert)

+1

Pensavo che qualcuno potesse suggerire questo, ma non credo che l'ack usi un aspetto negativo. Ad esempio, ho creato un file temporaneo in una directory temporanea contenente due righe: "goodboy" e "badboy" e quindi ho utilizzato il campione da Perl in poche parole: "ack" (?

+4

Il look-behind negativo è ack "(?, scappa con lo = willert

+0

Strano. Ho scritto sul mio libro a penna per rettificare il mio errore! –

3

Grazie ad un commento da altri question. Ho trovato che il lookbehind negativo è supportato sperimentalmente in grep con l'opzione -P/--perl-regexp, quindi potrebbe non essere ancora necessario utilizzare uno strumento diverso se si preferisce continuare a utilizzare grep.

A proposito, la mia alternativa preferita a grep è grin (che è scritta in python).

Problemi correlati