GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Mostra tutte le righe prima di una partita?

Voglio mostrare tutte le righe prima di una corrispondenza, non solo 10, o 7 o 14 per esempio, come spiegato in Come posso recuperare le righe prima/dopo il risultato di grep in bash?.

Come posso farlo? Non importa se la riga abbinata è inclusa o meno.

Ad esempio, invece di:

... | grep -B 10 -- "foo"

Voglio:

... | grep -B -- "foo"

Ma quest'ultimo codice non funziona.

Risposta accettata:

  • Compreso il match,

    sed '/foo/q' file
    

    È meglio q usa sed non appena viene trovata una corrispondenza, altrimenti sed continueresti a leggere il file e perdere tempo, il che sarebbe considerevole per file di grandi dimensioni.

  • Escludendo la partita,

    sed -n '/foo/q;p' file
    

    Il -n flag significa che solo le righe che raggiungono il p il comando verrà stampato. Dal momento che il foo la riga attiva il q uit azione, non raggiunge p e quindi non viene stampato.

    • Se il tuo sed è GNU, questo può essere semplificato in

      sed '/foo/Q' file
      

Riferimenti

  1. /foo/ — Indirizzi
  2. q , p — Comandi usati spesso
  3. Q — Comandi estesi GNU Sed
  4. -n — Opzioni della riga di comando

Ubuntu
  1. Corrispondenza di pattern multilinea utilizzando Sed, Awk o Grep?

  2. Mostra tutto il file fino alla partita?

  3. Sed:stampa solo la prima occorrenza di una corrispondenza di pattern?

  4. Come nascondere tutte le finestre e mostrare rapidamente il desktop?

  5. Kate – Mostra tutti gli spazi bianchi?

Come mostrare un elenco di tutti i database in MySQL

Come mostrare l'elenco di tutti i database su MySQL

Il comando Cat non mostra le righe del testo?

sed da inserire solo alla prima corrispondenza

Elimina le righe vuote usando sed

sed - inserisce riga dopo X righe dopo la corrispondenza