Supponendo che tu voglia abbinare l'intera linea al tuo modello, con GNU sed
, questo funziona:
sed -n '/^dog 123 4335$/ { :a; n; p; ba; }' infile
Equivalente standard:
sed -ne '/^dog 123 4335$/{:a' -e 'n;p;ba' -e '}' infile
Con il seguente input ( infile
):
cat 13123 23424
deer 2131 213132
bear 2313 21313
dog 123 4335
cat 13123 23424
deer 2131 213132
bear 2313 21313
L'output è:
cat 13123 23424
deer 2131 213132
bear 2313 21313
Spiegazione:
/^dog 123 4335$/
cerca il modello desiderato.
:a; n; p; ba;
è un ciclo che recupera una nuova riga da input ( n
), la stampa ( p
) e si ramifica per etichettare a :a; ...; ba;
.
Aggiornare
Ecco una risposta che si avvicina alle tue esigenze, ovvero modello in file2, grepping da file1:
tail -n +$(( 1 + $(grep -m1 -n -f file2 file1 | cut -d: -f1) )) file1
Il grep incorporato e il taglio trovano la prima riga contenente un modello da file2, questo numero di riga più uno viene passato alla coda, il più è lì per saltare la linea con il modello.
Se vuoi iniziare dall'ultima partita invece della prima partita sarebbe:
tail -n +$(( 1 + $(grep -n -f file2 file1 | tail -n1 | cut -d: -f1) )) file1
Nota che non tutte le versioni di coda supportano la notazione più.