Quiero mostrar todas las líneas antes de una coincidencia, no solo 10, 7 o 14, por ejemplo, como se explica en ¿Cómo obtengo líneas antes/después del resultado grep en bash?.
¿Cómo puedo hacerlo? No importa si la línea coincidente está incluida o no.
Por ejemplo, en lugar de:
... | grep -B 10 -- "foo"
quiero:
... | grep -B -- "foo"
Pero este último código no funciona.
Respuesta aceptada:
-
Incluyendo el partido,
sed '/foo/q' file
Es mejor q uit
sed
tan pronto como se encuentre una coincidencia; de lo contrario,sed
seguiría leyendo el archivo y perdiendo el tiempo, lo que sería considerable para archivos grandes. -
Excluyendo el partido,
sed -n '/foo/q;p' file
El
-n
bandera significa que solo las líneas que llegan a lap
se imprimirá el comando. Desde elfoo
la línea activa laq
uit action, no llega ap
y por lo tanto no se imprime.-
Si su
sed
es de GNU, esto se puede simplificar ased '/foo/Q' file
-
Referencias
/foo/
— Direccionesq
,p
— Comandos de uso frecuenteQ
— Comandos extendidos GNU Sed-n
— Opciones de línea de comandos