GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Mostrar todas las líneas antes de un partido?

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 la p se imprimirá el comando. Desde el foo la línea activa la q uit action, no llega a p y por lo tanto no se imprime.

    • Si su sed es de GNU, esto se puede simplificar a

      sed '/foo/Q' file
      

Referencias

  1. /foo/ — Direcciones
  2. q , p — Comandos de uso frecuente
  3. Q — Comandos extendidos GNU Sed
  4. -n — Opciones de línea de comandos

Ubuntu
  1. Cómo eliminar todas las líneas de un archivo en Vim

  2. sed principiante:cambiar todas las ocurrencias en una carpeta

  3. sed para insertar solo en la primera coincidencia

  4. grep coincide solo con líneas en un rango específico

  5. sed - insertar línea después de X líneas después del partido

Cómo mostrar una lista de todas las bases de datos en MySQL

Cómo mostrar la lista de todas las bases de datos en MySQL

¿El comando Cat no muestra las líneas del texto?

sed unir líneas

Código de retorno de sed para ninguna coincidencia

Eliminar líneas vacías usando sed