2013-07-26 30 views
6

Ich habe eine Datei, die in etwa so aussieht: Ich „FLAG“ und enthält jede Zeile löschen mußWie lösche ich die Zeile, die mit einem Muster und der Zeile dahinter mit sed übereinstimmt?

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

ich immer die eine Zeile unmittelbar nach der „FLAG“ Zeile löschen muß.

"FLAG" Zeilen kommen unregelmäßig genug, dass ich mich nicht auf irgendeine Art von Zeilennummernstrategie verlassen kann.

Wer weiß, wie man das mit sed macht?

Antwort

8

eine Verlängerung der GNU Version von Verwendung:

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

Es ergibt:

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

Perfect. Ich habe so etwas versucht, aber konnte die Syntax nicht richtig erraten. Vielen Dank! –

9

Dies funktioniert, sowie über die Erweiterungen nicht davon ab:

sed '/FLAG/{N 
d 
}' infile 

N liest die nächste Zeile in den Musterbereich, Dann löscht d den Musterbereich.

+1

Viel verpflichtet. Ich wünschte, ich könnte hier zwei Antworten akzeptieren. Gab dir einen positiven Kommentar. –

2

Hier ist eine Möglichkeit, mit awk:

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

oder

awk '/FLAG/{getline;next}1' file 
Verwandte Themen