2011-11-25 10 views
9

mio comando grep assomiglia a questo zgrep -B bb -A aa "pattern" *Aggiungere riga vuota dopo ogni risultato in grep

vorrei lke di avere output come:

file1:line1 
file1:line2 
file1:line3 
file1:pattern 
file1:line4 
file1:line5 
file1:line6 
      </blank line> 
file2:line1 
file2:line2 
file2:line3 
file2:pattern 
file2:line4 
file2:line5 
file2:line6 

Il problema è che è difficile distinguere quando le righe corrispondenti al primo risultato trovato terminano e iniziano le linee corrispondenti al secondo risultato trovato.

Nota che, anche se l'uomo grep dice che "-" viene aggiunto tra il gruppo contiguo di partite. Funziona solo quando si trovano più corrispondenze nello stesso file. ma nella mia ricerca (come sopra) sto cercando più file.

Si noti inoltre che l'aggiunta di una nuova riga vuota dopo ogni bb + aa + 1 linea non funziona perché quello che se un file ha meno di linee bb prima il modello.

+3

grep -H aiuterà a distinguere uscite. –

risposta

15

tubo grep uscita attraverso

awk -F: '{if(f!=$1)print ""; f=$1; print $0;}' 
+0

Funziona e ho svitato, grazie! Un lato negativo è che mi perdo - colore in questo modo. – moejoe

+0

@moejoe, si ottiene richiamare '--color' trasformandolo in' --color = always', credo. Perché di default il colore viene soppresso se l'output non è il terminale, che non lo è, quando si passa ad altri processi. –

0

Non v'è alcuna opzione per questo grep e io no pensare c'è un modo per farlo con xargs o tr (ho provato), ma qui è un ciclo for che lo farà (for f in *; do grep -H "1" $f && echo; done):

[ 11:58 [email protected] ~/test ]$ for f in *; do grep -H "1" $f && echo; done 

a:1 

b:1 

c:1 

d:1 

[ 11:58 [email protected] ~/test ]$ ll 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 a 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 b 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 c 
-rw-r--r-- 1 jon people  2B Nov 25 11:58 d 

Il -H è quello di visualizzare i nomi dei file per grep partite. Modificare lo * nella stringa di espansione del percorso globale/percorso, se necessario.

1

Non riesco a testarlo con i parametri -A e -B, quindi non posso dirlo con certezza, ma si può provare a usare sed G come menzionato qui su Unix StackEx. Perderai la colorazione se questo è importante.

0

Prova con -c 2; con la stampa di un contesto vedo grep sta separando sua trovato o/p

Problemi correlati