2011-11-25 15 views
9

mi comando grep se parece a esto zgrep -B -A bb aa "patrón" *línea en blanco después de cada resultado en grep

me habría lke tener salida como:

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 

El problema es que es difícil distinguir cuándo comienzan las líneas correspondientes al primer resultado encontrado y las líneas correspondientes al segundo resultado encontrado.

Tenga en cuenta que, aunque man grep dice que "-" se agrega entre un grupo de coincidencias contiguas. Funciona solo cuando se encuentran múltiples coincidencias en el mismo archivo. pero en mi búsqueda (como arriba) estoy buscando múltiples archivos.

también tenga en cuenta que agregar una nueva línea en blanco después de cada línea bb + aa + 1 no funcionará, ¿qué sucede si un archivo tiene menos líneas bb antes del patrón.

+3

grep -H ayudará a distinguir las salidas. –

Respuesta

15

grep tubo de salida a través de

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

Funciona y he votado a favor, ¡gracias! Un inconveniente es que pierdo - color de esta manera. – moejoe

+0

@moejoe, recibes la llamada '--color' de vuelta convirtiéndola en' --color = always', creo. Porque el color por defecto se suprime si la salida no es terminal, que no es, cuando canaliza a otro proceso. –

0

No hay ninguna opción para esto en grep y yo no piensan hay una manera de hacerlo con xargs o tr (probé), pero aquí es un bucle que lo hará (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 

El -H es para mostrar los nombres de archivo para grep partidos. Cambia el * a tu propia cadena de expansión global de ruta/mapa si es necesario.

1

No puedo probarlo con los parámetros -A y -B así que no puedo decirlo con certeza pero podrías intentar usar sed G como se menciona aquí en Unix StackEx. Sin embargo, perderás coloración si eso es importante.

0

Probar con -c 2; con la impresión de un contexto veo que grep está separando su encontrado o/p

Cuestiones relacionadas