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
sednon appena viene trovata una corrispondenza, altrimentisedcontinueresti a leggere il file e perdere tempo, il che sarebbe considerevole per file di grandi dimensioni. -
Escludendo la partita,
sed -n '/foo/q;p' fileIl
-nflag significa che solo le righe che raggiungono ilpil comando verrà stampato. Dal momento che ilfoola riga attiva ilquit azione, non raggiungepe quindi non viene stampato.-
Se il tuo
sedè GNU, questo può essere semplificato insed '/foo/Q' file
-
Riferimenti
/foo/— Indirizziq,p— Comandi usati spessoQ— Comandi estesi GNU Sed-n— Opzioni della riga di comando