2012-05-28 16 views
5

Attualmente sto annunci per "eccezione" da un file, e l'uscita 10 linee prima e dopo l'utilizzo:Eccezione grep ma esclude eccezione specifica

grep -C 10 "[* Eccezione"

Ma ora desidero escludere alcune eccezioni specifiche, dicono AAAException e BBBException, come potrei farlo? Può essere effettuato tramite

grep -v "AAAException" | grep -C 10 "[. * Eccezione"

Ma se all'interno del file, ho AAAException meno di 10 righe da qualche altra eccezione, quella linea non sarebbero inclusi nell'output, che non è quello che voglio. Come posso non corrispondere per AAAException, ma se si è verificato entro 10 righe da qualche altra Eccezione, sarà comunque incluso nell'output?

risposta

5

Se avete grep -P è possibile specificare un asserzione lookbehind negativo.

grep -C 10 -P '\[.*(?<!AAA|BBB)Exception' 
+0

Funziona perfettamente! Grazie. – Kathie

+0

Mi stavo chiedendo come funziona? Kathie

+0

Fondamentalmente significa "il testo che prima non può essere". – tripleee

0

Se il modello di corrispondenza positivo Eccezione è una parola che non è preceduta/seguita da altri alfabeti, è possibile utilizzare il limite di parole.

$ grep -C 10 '\<NullPointerException\>\|\<SessionTimeoutException\>' 
+0

Può essere qualsiasi tipo di eccezione, dire NullPointerException o SessionTimeoutException – Kathie

+0

Se avete elenco di + ve * eccezione, si può ** O con | ** – tuxuday

+0

Non capisco quello che vuoi dire "O con | ", tuttavia, allo stato attuale, ho invece una lista di esclusioni – Kathie

Problemi correlati