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, altrimentised
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 ilp
il comando verrà stampato. Dal momento che ilfoo
la riga attiva ilq
uit azione, non raggiungep
e 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