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' fileEs mejor q uit
sedtan pronto como se encuentre una coincidencia; de lo contrario,sedseguiría leyendo el archivo y perdiendo el tiempo, lo que sería considerable para archivos grandes. -
Excluyendo el partido,
sed -n '/foo/q;p' fileEl
-nbandera significa que solo las líneas que llegan a lapse imprimirá el comando. Desde elfoola línea activa laquit action, no llega apy por lo tanto no se imprime.-
Si su
sedes 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