2013-07-26 9 views
6

Ho un file che sembra qualcosa di simile:Come eliminare la linea che corrisponde a un modello e la linea dopo di essa con sed?

good text 
good text 
FLAG bad text 
bad text 
good text 
good text 
good test 
bad Text FLAG bad text 
bad text 
good text 

ho bisogno di eliminare qualsiasi riga contenente "FLAG" e ho sempre bisogno di eliminare l'una linea immediatamente dopo la riga "FLAG" troppo.

Le linee "FLAG" arrivano in modo abbastanza irregolare da non poter fare affidamento su alcun tipo di strategia del numero di linea.

Qualcuno sa come fare questo con sed?

risposta

8

Utilizzando un'estensione della versione GNU di :

sed -e '/FLAG/,+1 d' infile 

Produce:

good text 
good text 
good text 
good text 
good test 
good text 
+0

Perfetto. Stavo provando qualcosa del genere, ma non riuscivo a indovinare la sintassi correttamente. Grazie! –

9

Questo funziona, e non dipende da eventuali estensioni:

sed '/FLAG/{N 
d 
}' infile 

N legge la riga successiva nello spazio del motivo, quindi d elimina lo spazio del motivo.

+1

Molto obbligato. Vorrei poter accettare due risposte qui. Ti ha regalato un voto. –

2

Ecco un modo con awk:

awk '/FLAG/{f=1;next}f{f=0;next}1' file 

o

awk '/FLAG/{getline;next}1' file 
Problemi correlati